Premium Addons for Elementor - Version 1.0

Version Description

Download this release

Release Info

Developer leap13
Plugin Icon 128x128 Premium Addons for Elementor
Version 1.0
Comparing to
See all releases

Version 1.0

Files changed (50) hide show
  1. admin/activation/class-tgm-plugin-activation.php +3853 -0
  2. admin/activation/elementor-activation.php +93 -0
  3. admin/assets/admin.css +130 -0
  4. admin/assets/admin.js +45 -0
  5. admin/assets/js/sweetalert2/css/sweetalert2.min.css +1 -0
  6. admin/assets/js/sweetalert2/js/core.js +7613 -0
  7. admin/assets/js/sweetalert2/js/sweetalert2.min.js +1 -0
  8. admin/assets/pa-elements-font/css/pa-elements.css +77 -0
  9. admin/assets/pa-elements-font/fonts/pa-elements.eot +0 -0
  10. admin/assets/pa-elements-font/fonts/pa-elements.svg +27 -0
  11. admin/assets/pa-elements-font/fonts/pa-elements.ttf +0 -0
  12. admin/assets/pa-elements-font/fonts/pa-elements.woff +0 -0
  13. admin/settings-page.php +266 -0
  14. assets/css/ajax-loader.gif +0 -0
  15. assets/css/animate.css +1579 -0
  16. assets/css/elementor-preview-style.css +11 -0
  17. assets/css/fonts/slick.eot +0 -0
  18. assets/css/fonts/slick.svg +14 -0
  19. assets/css/fonts/slick.ttf +0 -0
  20. assets/css/fonts/slick.woff +0 -0
  21. assets/css/premium-addons.css +1497 -0
  22. assets/css/slick-theme.css +204 -0
  23. assets/css/slick.css +117 -0
  24. assets/js/lib/Vticker.js +10 -0
  25. assets/js/lib/countUpmin.js +1 -0
  26. assets/js/lib/gomap.js +11 -0
  27. assets/js/lib/jquerycountdown.js +816 -0
  28. assets/js/lib/slickmin.js +18 -0
  29. assets/js/lib/typedmin.js +3 -0
  30. assets/js/premium-addons.js +25 -0
  31. elementor-helper.php +84 -0
  32. index.php +9 -0
  33. premium-addons.php +219 -0
  34. queries.php +60 -0
  35. readme.txt +68 -0
  36. widgets/premium-banner.php +448 -0
  37. widgets/premium-blog.php +500 -0
  38. widgets/premium-carousel.php +1055 -0
  39. widgets/premium-countdown.php +615 -0
  40. widgets/premium-counter.php +639 -0
  41. widgets/premium-dual-header.php +392 -0
  42. widgets/premium-fancytext.php +424 -0
  43. widgets/premium-imageseparator.php +137 -0
  44. widgets/premium-maps.php +350 -0
  45. widgets/premium-modalbox.php +702 -0
  46. widgets/premium-person.php +477 -0
  47. widgets/premium-progressbar.php +261 -0
  48. widgets/premium-testimonials.php +619 -0
  49. widgets/premium-title.php +494 -0
  50. widgets/premium-videobox.php +353 -0
admin/activation/class-tgm-plugin-activation.php ADDED
@@ -0,0 +1,3853 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin installation and activation for WordPress themes.
4
+ *
5
+ * Please note that this is a drop-in library for a theme or plugin.
6
+ * The authors of this library (Thomas, Gary and Juliette) are NOT responsible
7
+ * for the support of your plugin or theme. Please contact the plugin
8
+ * or theme author for support.
9
+ *
10
+ * @package TGM-Plugin-Activation
11
+ * @version 2.6.0
12
+ * @link http://tgmpluginactivation.com/
13
+ * @author Thomas Griffin, Gary Jones, Juliette Reinders Folmer
14
+ * @copyright Copyright (c) 2011, Thomas Griffin
15
+ * @license GPL-2.0+
16
+ */
17
+
18
+ /*
19
+ Copyright 2011 Thomas Griffin (thomasgriffinmedia.com)
20
+
21
+ This program is free software; you can redistribute it and/or modify
22
+ it under the terms of the GNU General Public License, version 2, as
23
+ published by the Free Software Foundation.
24
+
25
+ This program is distributed in the hope that it will be useful,
26
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
27
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28
+ GNU General Public License for more details.
29
+
30
+ You should have received a copy of the GNU General Public License
31
+ along with this program; if not, write to the Free Software
32
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
33
+ */
34
+
35
+ if ( ! class_exists( 'TGM_Plugin_Activation' ) ) {
36
+
37
+ /**
38
+ * Automatic plugin installation and activation library.
39
+ *
40
+ * Creates a way to automatically install and activate plugins from within themes.
41
+ * The plugins can be either bundled, downloaded from the WordPress
42
+ * Plugin Repository or downloaded from another external source.
43
+ *
44
+ * @since 1.0.0
45
+ *
46
+ * @package TGM-Plugin-Activation
47
+ * @author Thomas Griffin
48
+ * @author Gary Jones
49
+ */
50
+ class TGM_Plugin_Activation {
51
+ /**
52
+ * TGMPA version number.
53
+ *
54
+ * @since 2.5.0
55
+ *
56
+ * @const string Version number.
57
+ */
58
+ const TGMPA_VERSION = '2.6.0';
59
+
60
+ /**
61
+ * Regular expression to test if a URL is a WP plugin repo URL.
62
+ *
63
+ * @const string Regex.
64
+ *
65
+ * @since 2.5.0
66
+ */
67
+ const WP_REPO_REGEX = '|^http[s]?://wordpress\.org/(?:extend/)?plugins/|';
68
+
69
+ /**
70
+ * Arbitrary regular expression to test if a string starts with a URL.
71
+ *
72
+ * @const string Regex.
73
+ *
74
+ * @since 2.5.0
75
+ */
76
+ const IS_URL_REGEX = '|^http[s]?://|';
77
+
78
+ /**
79
+ * Holds a copy of itself, so it can be referenced by the class name.
80
+ *
81
+ * @since 1.0.0
82
+ *
83
+ * @var TGM_Plugin_Activation
84
+ */
85
+ public static $instance;
86
+
87
+ /**
88
+ * Holds arrays of plugin details.
89
+ *
90
+ * @since 1.0.0
91
+ * @since 2.5.0 the array has the plugin slug as an associative key.
92
+ *
93
+ * @var array
94
+ */
95
+ public $plugins = array();
96
+
97
+ /**
98
+ * Holds arrays of plugin names to use to sort the plugins array.
99
+ *
100
+ * @since 2.5.0
101
+ *
102
+ * @var array
103
+ */
104
+ protected $sort_order = array();
105
+
106
+ /**
107
+ * Whether any plugins have the 'force_activation' setting set to true.
108
+ *
109
+ * @since 2.5.0
110
+ *
111
+ * @var bool
112
+ */
113
+ protected $has_forced_activation = false;
114
+
115
+ /**
116
+ * Whether any plugins have the 'force_deactivation' setting set to true.
117
+ *
118
+ * @since 2.5.0
119
+ *
120
+ * @var bool
121
+ */
122
+ protected $has_forced_deactivation = false;
123
+
124
+ /**
125
+ * Name of the unique ID to hash notices.
126
+ *
127
+ * @since 2.4.0
128
+ *
129
+ * @var string
130
+ */
131
+ public $id = 'tgmpa';
132
+
133
+ /**
134
+ * Name of the query-string argument for the admin page.
135
+ *
136
+ * @since 1.0.0
137
+ *
138
+ * @var string
139
+ */
140
+ protected $menu = 'tgmpa-install-plugins';
141
+
142
+ /**
143
+ * Parent menu file slug.
144
+ *
145
+ * @since 2.5.0
146
+ *
147
+ * @var string
148
+ */
149
+ public $parent_slug = 'themes.php';
150
+
151
+ /**
152
+ * Capability needed to view the plugin installation menu item.
153
+ *
154
+ * @since 2.5.0
155
+ *
156
+ * @var string
157
+ */
158
+ public $capability = 'edit_theme_options';
159
+
160
+ /**
161
+ * Default absolute path to folder containing bundled plugin zip files.
162
+ *
163
+ * @since 2.0.0
164
+ *
165
+ * @var string Absolute path prefix to zip file location for bundled plugins. Default is empty string.
166
+ */
167
+ public $default_path = '';
168
+
169
+ /**
170
+ * Flag to show admin notices or not.
171
+ *
172
+ * @since 2.1.0
173
+ *
174
+ * @var boolean
175
+ */
176
+ public $has_notices = true;
177
+
178
+ /**
179
+ * Flag to determine if the user can dismiss the notice nag.
180
+ *
181
+ * @since 2.4.0
182
+ *
183
+ * @var boolean
184
+ */
185
+ public $dismissable = true;
186
+
187
+ /**
188
+ * Message to be output above nag notice if dismissable is false.
189
+ *
190
+ * @since 2.4.0
191
+ *
192
+ * @var string
193
+ */
194
+ public $dismiss_msg = '';
195
+
196
+ /**
197
+ * Flag to set automatic activation of plugins. Off by default.
198
+ *
199
+ * @since 2.2.0
200
+ *
201
+ * @var boolean
202
+ */
203
+ public $is_automatic = false;
204
+
205
+ /**
206
+ * Optional message to display before the plugins table.
207
+ *
208
+ * @since 2.2.0
209
+ *
210
+ * @var string Message filtered by wp_kses_post(). Default is empty string.
211
+ */
212
+ public $message = '';
213
+
214
+ /**
215
+ * Holds configurable array of strings.
216
+ *
217
+ * Default values are added in the constructor.
218
+ *
219
+ * @since 2.0.0
220
+ *
221
+ * @var array
222
+ */
223
+ public $strings = array();
224
+
225
+ /**
226
+ * Holds the version of WordPress.
227
+ *
228
+ * @since 2.4.0
229
+ *
230
+ * @var int
231
+ */
232
+ public $wp_version;
233
+
234
+ /**
235
+ * Holds the hook name for the admin page.
236
+ *
237
+ * @since 2.5.0
238
+ *
239
+ * @var string
240
+ */
241
+ public $page_hook;
242
+
243
+ /**
244
+ * Adds a reference of this object to $instance, populates default strings,
245
+ * does the tgmpa_init action hook, and hooks in the interactions to init.
246
+ *
247
+ * {@internal This method should be `protected`, but as too many TGMPA implementations
248
+ * haven't upgraded beyond v2.3.6 yet, this gives backward compatibility issues.
249
+ * Reverted back to public for the time being.}}
250
+ *
251
+ * @since 1.0.0
252
+ *
253
+ * @see TGM_Plugin_Activation::init()
254
+ */
255
+ public function __construct() {
256
+ // Set the current WordPress version.
257
+ $this->wp_version = $GLOBALS['wp_version'];
258
+
259
+ // Announce that the class is ready, and pass the object (for advanced use).
260
+ do_action_ref_array( 'tgmpa_init', array( $this ) );
261
+
262
+ /*
263
+ * Load our text domain and allow for overloading the fall-back file.
264
+ *
265
+ * {@internal IMPORTANT! If this code changes, review the regex in the custom TGMPA
266
+ * generator on the website.}}
267
+ */
268
+ add_action( 'init', array( $this, 'load_textdomain' ), 5 );
269
+ add_filter( 'load_textdomain_mofile', array( $this, 'overload_textdomain_mofile' ), 10, 2 );
270
+
271
+ // When the rest of WP has loaded, kick-start the rest of the class.
272
+ add_action( 'init', array( $this, 'init' ) );
273
+ }
274
+
275
+ /**
276
+ * Magic method to (not) set protected properties from outside of this class.
277
+ *
278
+ * {@internal hackedihack... There is a serious bug in v2.3.2 - 2.3.6 where the `menu` property
279
+ * is being assigned rather than tested in a conditional, effectively rendering it useless.
280
+ * This 'hack' prevents this from happening.}}
281
+ *
282
+ * @see https://github.com/TGMPA/TGM-Plugin-Activation/blob/2.3.6/tgm-plugin-activation/class-tgm-plugin-activation.php#L1593
283
+ *
284
+ * @since 2.5.2
285
+ *
286
+ * @param string $name Name of an inaccessible property.
287
+ * @param mixed $value Value to assign to the property.
288
+ * @return void Silently fail to set the property when this is tried from outside of this class context.
289
+ * (Inside this class context, the __set() method if not used as there is direct access.)
290
+ */
291
+ public function __set( $name, $value ) {
292
+ return;
293
+ }
294
+
295
+ /**
296
+ * Magic method to get the value of a protected property outside of this class context.
297
+ *
298
+ * @since 2.5.2
299
+ *
300
+ * @param string $name Name of an inaccessible property.
301
+ * @return mixed The property value.
302
+ */
303
+ public function __get( $name ) {
304
+ return $this->{$name};
305
+ }
306
+
307
+ /**
308
+ * Initialise the interactions between this class and WordPress.
309
+ *
310
+ * Hooks in three new methods for the class: admin_menu, notices and styles.
311
+ *
312
+ * @since 2.0.0
313
+ *
314
+ * @see TGM_Plugin_Activation::admin_menu()
315
+ * @see TGM_Plugin_Activation::notices()
316
+ * @see TGM_Plugin_Activation::styles()
317
+ */
318
+ public function init() {
319
+ /**
320
+ * By default TGMPA only loads on the WP back-end and not in an Ajax call. Using this filter
321
+ * you can overrule that behaviour.
322
+ *
323
+ * @since 2.5.0
324
+ *
325
+ * @param bool $load Whether or not TGMPA should load.
326
+ * Defaults to the return of `is_admin() && ! defined( 'DOING_AJAX' )`.
327
+ */
328
+ if ( true !== apply_filters( 'tgmpa_load', ( is_admin() && ! defined( 'DOING_AJAX' ) ) ) ) {
329
+ return;
330
+ }
331
+
332
+ // Load class strings.
333
+ $this->strings = array(
334
+ 'page_title' => __( 'Install Required Plugins', 'tgmpa' ),
335
+ 'menu_title' => __( 'Install Plugins', 'tgmpa' ),
336
+ /* translators: %s: plugin name. */
337
+ 'installing' => __( 'Installing Plugin: %s', 'tgmpa' ),
338
+ /* translators: %s: plugin name. */
339
+ 'updating' => __( 'Updating Plugin: %s', 'tgmpa' ),
340
+ 'oops' => __( 'Something went wrong with the plugin API.', 'tgmpa' ),
341
+ 'notice_can_install_required' => _n_noop(
342
+ /* translators: 1: plugin name(s). */
343
+ 'This theme requires the following plugin: %1$s.',
344
+ 'This theme requires the following plugins: %1$s.',
345
+ 'tgmpa'
346
+ ),
347
+ 'notice_can_install_recommended' => _n_noop(
348
+ /* translators: 1: plugin name(s). */
349
+ 'This theme recommends the following plugin: %1$s.',
350
+ 'This theme recommends the following plugins: %1$s.',
351
+ 'tgmpa'
352
+ ),
353
+ 'notice_ask_to_update' => _n_noop(
354
+ /* translators: 1: plugin name(s). */
355
+ 'The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: %1$s.',
356
+ 'The following plugins need to be updated to their latest version to ensure maximum compatibility with this theme: %1$s.',
357
+ 'tgmpa'
358
+ ),
359
+ 'notice_ask_to_update_maybe' => _n_noop(
360
+ /* translators: 1: plugin name(s). */
361
+ 'There is an update available for: %1$s.',
362
+ 'There are updates available for the following plugins: %1$s.',
363
+ 'tgmpa'
364
+ ),
365
+ 'notice_can_activate_required' => _n_noop(
366
+ /* translators: 1: plugin name(s). */
367
+ 'The following required plugin is currently inactive: %1$s.',
368
+ 'The following required plugins are currently inactive: %1$s.',
369
+ 'tgmpa'
370
+ ),
371
+ 'notice_can_activate_recommended' => _n_noop(
372
+ /* translators: 1: plugin name(s). */
373
+ 'The following recommended plugin is currently inactive: %1$s.',
374
+ 'The following recommended plugins are currently inactive: %1$s.',
375
+ 'tgmpa'
376
+ ),
377
+ 'install_link' => _n_noop(
378
+ 'Begin installing plugin',
379
+ 'Begin installing plugins',
380
+ 'tgmpa'
381
+ ),
382
+ 'update_link' => _n_noop(
383
+ 'Begin updating plugin',
384
+ 'Begin updating plugins',
385
+ 'tgmpa'
386
+ ),
387
+ 'activate_link' => _n_noop(
388
+ 'Begin activating plugin',
389
+ 'Begin activating plugins',
390
+ 'tgmpa'
391
+ ),
392
+ 'return' => __( 'Return to Required Plugins Installer', 'tgmpa' ),
393
+ 'dashboard' => __( 'Return to the Dashboard', 'tgmpa' ),
394
+ 'plugin_activated' => __( 'Plugin activated successfully.', 'tgmpa' ),
395
+ 'activated_successfully' => __( 'The following plugin was activated successfully:', 'tgmpa' ),
396
+ /* translators: 1: plugin name. */
397
+ 'plugin_already_active' => __( 'No action taken. Plugin %1$s was already active.', 'tgmpa' ),
398
+ /* translators: 1: plugin name. */
399
+ 'plugin_needs_higher_version' => __( 'Plugin not activated. A higher version of %s is needed for this theme. Please update the plugin.', 'tgmpa' ),
400
+ /* translators: 1: dashboard link. */
401
+ 'complete' => __( 'All plugins installed and activated successfully. %1$s', 'tgmpa' ),
402
+ 'dismiss' => __( 'Dismiss this notice', 'tgmpa' ),
403
+ 'notice_cannot_install_activate' => __( 'There are one or more required or recommended plugins to install, update or activate.', 'tgmpa' ),
404
+ 'contact_admin' => __( 'Please contact the administrator of this site for help.', 'tgmpa' ),
405
+ );
406
+
407
+ do_action( 'tgmpa_register' );
408
+
409
+ /* After this point, the plugins should be registered and the configuration set. */
410
+
411
+ // Proceed only if we have plugins to handle.
412
+ if ( empty( $this->plugins ) || ! is_array( $this->plugins ) ) {
413
+ return;
414
+ }
415
+
416
+ // Set up the menu and notices if we still have outstanding actions.
417
+ if ( true !== $this->is_tgmpa_complete() ) {
418
+ // Sort the plugins.
419
+ array_multisort( $this->sort_order, SORT_ASC, $this->plugins );
420
+
421
+ add_action( 'admin_menu', array( $this, 'admin_menu' ) );
422
+ add_action( 'admin_head', array( $this, 'dismiss' ) );
423
+
424
+ // Prevent the normal links from showing underneath a single install/update page.
425
+ add_filter( 'install_plugin_complete_actions', array( $this, 'actions' ) );
426
+ add_filter( 'update_plugin_complete_actions', array( $this, 'actions' ) );
427
+
428
+ if ( $this->has_notices ) {
429
+ add_action( 'admin_notices', array( $this, 'notices' ) );
430
+ add_action( 'admin_init', array( $this, 'admin_init' ), 1 );
431
+ add_action( 'admin_enqueue_scripts', array( $this, 'thickbox' ) );
432
+ }
433
+ }
434
+
435
+ // If needed, filter plugin action links.
436
+ add_action( 'load-plugins.php', array( $this, 'add_plugin_action_link_filters' ), 1 );
437
+
438
+ // Make sure things get reset on switch theme.
439
+ add_action( 'switch_theme', array( $this, 'flush_plugins_cache' ) );
440
+
441
+ if ( $this->has_notices ) {
442
+ add_action( 'switch_theme', array( $this, 'update_dismiss' ) );
443
+ }
444
+
445
+ // Setup the force activation hook.
446
+ if ( true === $this->has_forced_activation ) {
447
+ add_action( 'admin_init', array( $this, 'force_activation' ) );
448
+ }
449
+
450
+ // Setup the force deactivation hook.
451
+ if ( true === $this->has_forced_deactivation ) {
452
+ add_action( 'switch_theme', array( $this, 'force_deactivation' ) );
453
+ }
454
+ }
455
+
456
+ /**
457
+ * Load translations.
458
+ *
459
+ * @since 2.6.0
460
+ *
461
+ * (@internal Uses `load_theme_textdomain()` rather than `load_plugin_textdomain()` to
462
+ * get round the different ways of handling the path and deprecated notices being thrown
463
+ * and such. For plugins, the actual file name will be corrected by a filter.}}
464
+ *
465
+ * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA
466
+ * generator on the website.}}
467
+ */
468
+ public function load_textdomain() {
469
+ if ( is_textdomain_loaded( 'tgmpa' ) ) {
470
+ return;
471
+ }
472
+
473
+ if ( false !== strpos( __FILE__, WP_PLUGIN_DIR ) || false !== strpos( __FILE__, WPMU_PLUGIN_DIR ) ) {
474
+ // Plugin, we'll need to adjust the file name.
475
+ add_action( 'load_textdomain_mofile', array( $this, 'correct_plugin_mofile' ), 10, 2 );
476
+ load_theme_textdomain( 'tgmpa', dirname( __FILE__ ) . '/languages' );
477
+ remove_action( 'load_textdomain_mofile', array( $this, 'correct_plugin_mofile' ), 10 );
478
+ } else {
479
+ load_theme_textdomain( 'tgmpa', dirname( __FILE__ ) . '/languages' );
480
+ }
481
+ }
482
+
483
+ /**
484
+ * Correct the .mo file name for (must-use) plugins.
485
+ *
486
+ * Themese use `/path/{locale}.mo` while plugins use `/path/{text-domain}-{locale}.mo`.
487
+ *
488
+ * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA
489
+ * generator on the website.}}
490
+ *
491
+ * @since 2.6.0
492
+ *
493
+ * @param string $mofile Full path to the target mofile.
494
+ * @param string $domain The domain for which a language file is being loaded.
495
+ * @return string $mofile
496
+ */
497
+ public function correct_plugin_mofile( $mofile, $domain ) {
498
+ // Exit early if not our domain (just in case).
499
+ if ( 'tgmpa' !== $domain ) {
500
+ return $mofile;
501
+ }
502
+ return preg_replace( '`/([a-z]{2}_[A-Z]{2}.mo)$`', '/tgmpa-$1', $mofile );
503
+ }
504
+
505
+ /**
506
+ * Potentially overload the fall-back translation file for the current language.
507
+ *
508
+ * WP, by default since WP 3.7, will load a local translation first and if none
509
+ * can be found, will try and find a translation in the /wp-content/languages/ directory.
510
+ * As this library is theme/plugin agnostic, translation files for TGMPA can exist both
511
+ * in the WP_LANG_DIR /plugins/ subdirectory as well as in the /themes/ subdirectory.
512
+ *
513
+ * This method makes sure both directories are checked.
514
+ *
515
+ * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA
516
+ * generator on the website.}}
517
+ *
518
+ * @since 2.6.0
519
+ *
520
+ * @param string $mofile Full path to the target mofile.
521
+ * @param string $domain The domain for which a language file is being loaded.
522
+ * @return string $mofile
523
+ */
524
+ public function overload_textdomain_mofile( $mofile, $domain ) {
525
+ // Exit early if not our domain, not a WP_LANG_DIR load or if the file exists and is readable.
526
+ if ( 'tgmpa' !== $domain || false === strpos( $mofile, WP_LANG_DIR ) || @is_readable( $mofile ) ) {
527
+ return $mofile;
528
+ }
529
+
530
+ // Current fallback file is not valid, let's try the alternative option.
531
+ if ( false !== strpos( $mofile, '/themes/' ) ) {
532
+ return str_replace( '/themes/', '/plugins/', $mofile );
533
+ } elseif ( false !== strpos( $mofile, '/plugins/' ) ) {
534
+ return str_replace( '/plugins/', '/themes/', $mofile );
535
+ } else {
536
+ return $mofile;
537
+ }
538
+ }
539
+
540
+ /**
541
+ * Hook in plugin action link filters for the WP native plugins page.
542
+ *
543
+ * - Prevent activation of plugins which don't meet the minimum version requirements.
544
+ * - Prevent deactivation of force-activated plugins.
545
+ * - Add update notice if update available.
546
+ *
547
+ * @since 2.5.0
548
+ */
549
+ public function add_plugin_action_link_filters() {
550
+ foreach ( $this->plugins as $slug => $plugin ) {
551
+ if ( false === $this->can_plugin_activate( $slug ) ) {
552
+ add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_activate' ), 20 );
553
+ }
554
+
555
+ if ( true === $plugin['force_activation'] ) {
556
+ add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_deactivate' ), 20 );
557
+ }
558
+
559
+ if ( false !== $this->does_plugin_require_update( $slug ) ) {
560
+ add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_update' ), 20 );
561
+ }
562
+ }
563
+ }
564
+
565
+ /**
566
+ * Remove the 'Activate' link on the WP native plugins page if the plugin does not meet the
567
+ * minimum version requirements.
568
+ *
569
+ * @since 2.5.0
570
+ *
571
+ * @param array $actions Action links.
572
+ * @return array
573
+ */
574
+ public function filter_plugin_action_links_activate( $actions ) {
575
+ unset( $actions['activate'] );
576
+
577
+ return $actions;
578
+ }
579
+
580
+ /**
581
+ * Remove the 'Deactivate' link on the WP native plugins page if the plugin has been set to force activate.
582
+ *
583
+ * @since 2.5.0
584
+ *
585
+ * @param array $actions Action links.
586
+ * @return array
587
+ */
588
+ public function filter_plugin_action_links_deactivate( $actions ) {
589
+ unset( $actions['deactivate'] );
590
+
591
+ return $actions;
592
+ }
593
+
594
+ /**
595
+ * Add a 'Requires update' link on the WP native plugins page if the plugin does not meet the
596
+ * minimum version requirements.
597
+ *
598
+ * @since 2.5.0
599
+ *
600
+ * @param array $actions Action links.
601
+ * @return array
602
+ */
603
+ public function filter_plugin_action_links_update( $actions ) {
604
+ $actions['update'] = sprintf(
605
+ '<a href="%1$s" title="%2$s" class="edit">%3$s</a>',
606
+ esc_url( $this->get_tgmpa_status_url( 'update' ) ),
607
+ esc_attr__( 'This plugin needs to be updated to be compatible with your theme.', 'tgmpa' ),
608
+ esc_html__( 'Update Required', 'tgmpa' )
609
+ );
610
+
611
+ return $actions;
612
+ }
613
+
614
+ /**
615
+ * Handles calls to show plugin information via links in the notices.
616
+ *
617
+ * We get the links in the admin notices to point to the TGMPA page, rather
618
+ * than the typical plugin-install.php file, so we can prepare everything
619
+ * beforehand.
620
+ *
621
+ * WP does not make it easy to show the plugin information in the thickbox -
622
+ * here we have to require a file that includes a function that does the
623
+ * main work of displaying it, enqueue some styles, set up some globals and
624
+ * finally call that function before exiting.
625
+ *
626
+ * Down right easy once you know how...
627
+ *
628
+ * Returns early if not the TGMPA page.
629
+ *
630
+ * @since 2.1.0
631
+ *
632
+ * @global string $tab Used as iframe div class names, helps with styling
633
+ * @global string $body_id Used as the iframe body ID, helps with styling
634
+ *
635
+ * @return null Returns early if not the TGMPA page.
636
+ */
637
+ public function admin_init() {
638
+ if ( ! $this->is_tgmpa_page() ) {
639
+ return;
640
+ }
641
+
642
+ if ( isset( $_REQUEST['tab'] ) && 'plugin-information' === $_REQUEST['tab'] ) {
643
+ // Needed for install_plugin_information().
644
+ require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
645
+
646
+ wp_enqueue_style( 'plugin-install' );
647
+
648
+ global $tab, $body_id;
649
+ $body_id = 'plugin-information';
650
+ // @codingStandardsIgnoreStart
651
+ $tab = 'plugin-information';
652
+ // @codingStandardsIgnoreEnd
653
+
654
+ install_plugin_information();
655
+
656
+ exit;
657
+ }
658
+ }
659
+
660
+ /**
661
+ * Enqueue thickbox scripts/styles for plugin info.
662
+ *
663
+ * Thickbox is not automatically included on all admin pages, so we must
664
+ * manually enqueue it for those pages.
665
+ *
666
+ * Thickbox is only loaded if the user has not dismissed the admin
667
+ * notice or if there are any plugins left to install and activate.
668
+ *
669
+ * @since 2.1.0
670
+ */
671
+ public function thickbox() {
672
+ if ( ! get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) ) {
673
+ add_thickbox();
674
+ }
675
+ }
676
+
677
+ /**
678
+ * Adds submenu page if there are plugin actions to take.
679
+ *
680
+ * This method adds the submenu page letting users know that a required
681
+ * plugin needs to be installed.
682
+ *
683
+ * This page disappears once the plugin has been installed and activated.
684
+ *
685
+ * @since 1.0.0
686
+ *
687
+ * @see TGM_Plugin_Activation::init()
688
+ * @see TGM_Plugin_Activation::install_plugins_page()
689
+ *
690
+ * @return null Return early if user lacks capability to install a plugin.
691
+ */
692
+ public function admin_menu() {
693
+ // Make sure privileges are correct to see the page.
694
+ if ( ! current_user_can( 'install_plugins' ) ) {
695
+ return;
696
+ }
697
+
698
+ $args = apply_filters(
699
+ 'tgmpa_admin_menu_args',
700
+ array(
701
+ 'parent_slug' => $this->parent_slug, // Parent Menu slug.
702
+ 'page_title' => $this->strings['page_title'], // Page title.
703
+ 'menu_title' => $this->strings['menu_title'], // Menu title.
704
+ 'capability' => $this->capability, // Capability.
705
+ 'menu_slug' => $this->menu, // Menu slug.
706
+ 'function' => array( $this, 'install_plugins_page' ), // Callback.
707
+ )
708
+ );
709
+
710
+ $this->add_admin_menu( $args );
711
+ }
712
+
713
+ /**
714
+ * Add the menu item.
715
+ *
716
+ * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA
717
+ * generator on the website.}}
718
+ *
719
+ * @since 2.5.0
720
+ *
721
+ * @param array $args Menu item configuration.
722
+ */
723
+ protected function add_admin_menu( array $args ) {
724
+ if ( has_filter( 'tgmpa_admin_menu_use_add_theme_page' ) ) {
725
+ _deprecated_function( 'The "tgmpa_admin_menu_use_add_theme_page" filter', '2.5.0', esc_html__( 'Set the parent_slug config variable instead.', 'tgmpa' ) );
726
+ }
727
+
728
+ if ( 'themes.php' === $this->parent_slug ) {
729
+ $this->page_hook = call_user_func( 'add_theme_page', $args['page_title'], $args['menu_title'], $args['capability'], $args['menu_slug'], $args['function'] );
730
+ } else {
731
+ $this->page_hook = call_user_func( 'add_submenu_page', $args['parent_slug'], $args['page_title'], $args['menu_title'], $args['capability'], $args['menu_slug'], $args['function'] );
732
+ }
733
+ }
734
+
735
+ /**
736
+ * Echoes plugin installation form.
737
+ *
738
+ * This method is the callback for the admin_menu method function.
739
+ * This displays the admin page and form area where the user can select to install and activate the plugin.
740
+ * Aborts early if we're processing a plugin installation action.
741
+ *
742
+ * @since 1.0.0
743
+ *
744
+ * @return null Aborts early if we're processing a plugin installation action.
745
+ */
746
+ public function install_plugins_page() {
747
+ // Store new instance of plugin table in object.
748
+ $plugin_table = new TGMPA_List_Table;
749
+
750
+ // Return early if processing a plugin installation action.
751
+ if ( ( ( 'tgmpa-bulk-install' === $plugin_table->current_action() || 'tgmpa-bulk-update' === $plugin_table->current_action() ) && $plugin_table->process_bulk_actions() ) || $this->do_plugin_install() ) {
752
+ return;
753
+ }
754
+
755
+ // Force refresh of available plugin information so we'll know about manual updates/deletes.
756
+ wp_clean_plugins_cache( false );
757
+
758
+ ?>
759
+ <div class="tgmpa wrap">
760
+ <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
761
+ <?php $plugin_table->prepare_items(); ?>
762
+
763
+ <?php
764
+ if ( ! empty( $this->message ) && is_string( $this->message ) ) {
765
+ echo wp_kses_post( $this->message );
766
+ }
767
+ ?>
768
+ <?php $plugin_table->views(); ?>
769
+
770
+ <form id="tgmpa-plugins" action="" method="post">
771
+ <input type="hidden" name="tgmpa-page" value="<?php echo esc_attr( $this->menu ); ?>" />
772
+ <input type="hidden" name="plugin_status" value="<?php echo esc_attr( $plugin_table->view_context ); ?>" />
773
+ <?php $plugin_table->display(); ?>
774
+ </form>
775
+ </div>
776
+ <?php
777
+ }
778
+
779
+ /**
780
+ * Installs, updates or activates a plugin depending on the action link clicked by the user.
781
+ *
782
+ * Checks the $_GET variable to see which actions have been
783
+ * passed and responds with the appropriate method.
784
+ *
785
+ * Uses WP_Filesystem to process and handle the plugin installation
786
+ * method.
787
+ *
788
+ * @since 1.0.0
789
+ *
790
+ * @uses WP_Filesystem
791
+ * @uses WP_Error
792
+ * @uses WP_Upgrader
793
+ * @uses Plugin_Upgrader
794
+ * @uses Plugin_Installer_Skin
795
+ * @uses Plugin_Upgrader_Skin
796
+ *
797
+ * @return boolean True on success, false on failure.
798
+ */
799
+ protected function do_plugin_install() {
800
+ if ( empty( $_GET['plugin'] ) ) {
801
+ return false;
802
+ }
803
+
804
+ // All plugin information will be stored in an array for processing.
805
+ $slug = $this->sanitize_key( urldecode( $_GET['plugin'] ) );
806
+
807
+ if ( ! isset( $this->plugins[ $slug ] ) ) {
808
+ return false;
809
+ }
810
+
811
+ // Was an install or upgrade action link clicked?
812
+ if ( ( isset( $_GET['tgmpa-install'] ) && 'install-plugin' === $_GET['tgmpa-install'] ) || ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) ) {
813
+
814
+ $install_type = 'install';
815
+ if ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) {
816
+ $install_type = 'update';
817
+ }
818
+
819
+ check_admin_referer( 'tgmpa-' . $install_type, 'tgmpa-nonce' );
820
+
821
+ // Pass necessary information via URL if WP_Filesystem is needed.
822
+ $url = wp_nonce_url(
823
+ add_query_arg(
824
+ array(
825
+ 'plugin' => urlencode( $slug ),
826
+ 'tgmpa-' . $install_type => $install_type . '-plugin',
827
+ ),
828
+ $this->get_tgmpa_url()
829
+ ),
830
+ 'tgmpa-' . $install_type,
831
+ 'tgmpa-nonce'
832
+ );
833
+
834
+ $method = ''; // Leave blank so WP_Filesystem can populate it as necessary.
835
+
836
+ if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, array() ) ) ) {
837
+ return true;
838
+ }
839
+
840
+ if ( ! WP_Filesystem( $creds ) ) {
841
+ request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, array() ); // Setup WP_Filesystem.
842
+ return true;
843
+ }
844
+
845
+ /* If we arrive here, we have the filesystem. */
846
+
847
+ // Prep variables for Plugin_Installer_Skin class.
848
+ $extra = array();
849
+ $extra['slug'] = $slug; // Needed for potentially renaming of directory name.
850
+ $source = $this->get_download_url( $slug );
851
+ $api = ( 'repo' === $this->plugins[ $slug ]['source_type'] ) ? $this->get_plugins_api( $slug ) : null;
852
+ $api = ( false !== $api ) ? $api : null;
853
+
854
+ $url = add_query_arg(
855
+ array(
856
+ 'action' => $install_type . '-plugin',
857
+ 'plugin' => urlencode( $slug ),
858
+ ),
859
+ 'update.php'
860
+ );
861
+
862
+ if ( ! class_exists( 'Plugin_Upgrader', false ) ) {
863
+ require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
864
+ }
865
+
866
+ $title = ( 'update' === $install_type ) ? $this->strings['updating'] : $this->strings['installing'];
867
+ $skin_args = array(
868
+ 'type' => ( 'bundled' !== $this->plugins[ $slug ]['source_type'] ) ? 'web' : 'upload',
869
+ 'title' => sprintf( $title, $this->plugins[ $slug ]['name'] ),
870
+ 'url' => esc_url_raw( $url ),
871
+ 'nonce' => $install_type . '-plugin_' . $slug,
872
+ 'plugin' => '',
873
+ 'api' => $api,
874
+ 'extra' => $extra,
875
+ );
876
+ unset( $title );
877
+
878
+ if ( 'update' === $install_type ) {
879
+ $skin_args['plugin'] = $this->plugins[ $slug ]['file_path'];
880
+ $skin = new Plugin_Upgrader_Skin( $skin_args );
881
+ } else {
882
+ $skin = new Plugin_Installer_Skin( $skin_args );
883
+ }
884
+
885
+ // Create a new instance of Plugin_Upgrader.
886
+ $upgrader = new Plugin_Upgrader( $skin );
887
+
888
+ // Perform the action and install the plugin from the $source urldecode().
889
+ add_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1, 3 );
890
+
891
+ if ( 'update' === $install_type ) {
892
+ // Inject our info into the update transient.
893
+ $to_inject = array( $slug => $this->plugins[ $slug ] );
894
+ $to_inject[ $slug ]['source'] = $source;
895
+ $this->inject_update_info( $to_inject );
896
+
897
+ $upgrader->upgrade( $this->plugins[ $slug ]['file_path'] );
898
+ } else {
899
+ $upgrader->install( $source );
900
+ }
901
+
902
+ remove_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1 );
903
+
904
+ // Make sure we have the correct file path now the plugin is installed/updated.
905
+ $this->populate_file_path( $slug );
906
+
907
+ // Only activate plugins if the config option is set to true and the plugin isn't
908
+ // already active (upgrade).
909
+ if ( $this->is_automatic && ! $this->is_plugin_active( $slug ) ) {
910
+ $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method.
911
+ if ( false === $this->activate_single_plugin( $plugin_activate, $slug, true ) ) {
912
+ return true; // Finish execution of the function early as we encountered an error.
913
+ }
914
+ }
915
+
916
+ $this->show_tgmpa_version();
917
+
918
+ // Display message based on if all plugins are now active or not.
919
+ if ( $this->is_tgmpa_complete() ) {
920
+ echo '<p>', sprintf( esc_html( $this->strings['complete'] ), '<a href="' . esc_url( self_admin_url() ) . '">' . esc_html__( 'Return to the Dashboard', 'tgmpa' ) . '</a>' ), '</p>';
921
+ echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>';
922
+ } else {
923
+ echo '<p><a href="', esc_url( $this->get_tgmpa_url() ), '" target="_parent">', esc_html( $this->strings['return'] ), '</a></p>';
924
+ }
925
+
926
+ return true;
927
+ } elseif ( isset( $this->plugins[ $slug ]['file_path'], $_GET['tgmpa-activate'] ) && 'activate-plugin' === $_GET['tgmpa-activate'] ) {
928
+ // Activate action link was clicked.
929
+ check_admin_referer( 'tgmpa-activate', 'tgmpa-nonce' );
930
+
931
+ if ( false === $this->activate_single_plugin( $this->plugins[ $slug ]['file_path'], $slug ) ) {
932
+ return true; // Finish execution of the function early as we encountered an error.
933
+ }
934
+ }
935
+
936
+ return false;
937
+ }
938
+
939
+ /**
940
+ * Inject information into the 'update_plugins' site transient as WP checks that before running an update.
941
+ *
942
+ * @since 2.5.0
943
+ *
944
+ * @param array $plugins The plugin information for the plugins which are to be updated.
945
+ */
946
+ public function inject_update_info( $plugins ) {
947
+ $repo_updates = get_site_transient( 'update_plugins' );
948
+
949
+ if ( ! is_object( $repo_updates ) ) {
950
+ $repo_updates = new stdClass;
951
+ }
952
+
953
+ foreach ( $plugins as $slug => $plugin ) {
954
+ $file_path = $plugin['file_path'];
955
+
956
+ if ( empty( $repo_updates->response[ $file_path ] ) ) {
957
+ $repo_updates->response[ $file_path ] = new stdClass;
958
+ }
959
+
960
+ // We only really need to set package, but let's do all we can in case WP changes something.
961
+ $repo_updates->response[ $file_path ]->slug = $slug;
962
+ $repo_updates->response[ $file_path ]->plugin = $file_path;
963
+ $repo_updates->response[ $file_path ]->new_version = $plugin['version'];
964
+ $repo_updates->response[ $file_path ]->package = $plugin['source'];
965
+ if ( empty( $repo_updates->response[ $file_path ]->url ) && ! empty( $plugin['external_url'] ) ) {
966
+ $repo_updates->response[ $file_path ]->url = $plugin['external_url'];
967
+ }
968
+ }
969
+
970
+ set_site_transient( 'update_plugins', $repo_updates );
971
+ }
972
+
973
+ /**
974
+ * Adjust the plugin directory name if necessary.
975
+ *
976
+ * The final destination directory of a plugin is based on the subdirectory name found in the
977
+ * (un)zipped source. In some cases - most notably GitHub repository plugin downloads -, this
978
+ * subdirectory name is not the same as the expected slug and the plugin will not be recognized
979
+ * as installed. This is fixed by adjusting the temporary unzipped source subdirectory name to
980
+ * the expected plugin slug.
981
+ *
982
+ * @since 2.5.0
983
+ *
984
+ * @param string $source Path to upgrade/zip-file-name.tmp/subdirectory/.
985
+ * @param string $remote_source Path to upgrade/zip-file-name.tmp.
986
+ * @param \WP_Upgrader $upgrader Instance of the upgrader which installs the plugin.
987
+ * @return string $source
988
+ */
989
+ public function maybe_adjust_source_dir( $source, $remote_source, $upgrader ) {
990
+ if ( ! $this->is_tgmpa_page() || ! is_object( $GLOBALS['wp_filesystem'] ) ) {
991
+ return $source;
992
+ }
993
+
994
+ // Check for single file plugins.
995
+ $source_files = array_keys( $GLOBALS['wp_filesystem']->dirlist( $remote_source ) );
996
+ if ( 1 === count( $source_files ) && false === $GLOBALS['wp_filesystem']->is_dir( $source ) ) {
997
+ return $source;
998
+ }
999
+
1000
+ // Multi-file plugin, let's see if the directory is correctly named.
1001
+ $desired_slug = '';
1002
+
1003
+ // Figure out what the slug is supposed to be.
1004
+ if ( false === $upgrader->bulk && ! empty( $upgrader->skin->options['extra']['slug'] ) ) {
1005
+ $desired_slug = $upgrader->skin->options['extra']['slug'];
1006
+ } else {
1007
+ // Bulk installer contains less info, so fall back on the info registered here.
1008
+ foreach ( $this->plugins as $slug => $plugin ) {
1009
+ if ( ! empty( $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) && $plugin['name'] === $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) {
1010
+ $desired_slug = $slug;
1011
+ break;
1012
+ }
1013
+ }
1014
+ unset( $slug, $plugin );
1015
+ }
1016
+
1017
+ if ( ! empty( $desired_slug ) ) {
1018
+ $subdir_name = untrailingslashit( str_replace( trailingslashit( $remote_source ), '', $source ) );
1019
+
1020
+ if ( ! empty( $subdir_name ) && $subdir_name !== $desired_slug ) {
1021
+ $from_path = untrailingslashit( $source );
1022
+ $to_path = trailingslashit( $remote_source ) . $desired_slug;
1023
+
1024
+ if ( true === $GLOBALS['wp_filesystem']->move( $from_path, $to_path ) ) {
1025
+ return trailingslashit( $to_path );
1026
+ } else {
1027
+ return new WP_Error( 'rename_failed', esc_html__( 'The remote plugin package does not contain a folder with the desired slug and renaming did not work.', 'tgmpa' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'tgmpa' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) );
1028
+ }
1029
+ } elseif ( empty( $subdir_name ) ) {
1030
+ return new WP_Error( 'packaged_wrong', esc_html__( 'The remote plugin package consists of more than one file, but the files are not packaged in a folder.', 'tgmpa' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'tgmpa' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) );
1031
+ }
1032
+ }
1033
+
1034
+ return $source;
1035
+ }
1036
+
1037
+ /**
1038
+ * Activate a single plugin and send feedback about the result to the screen.
1039
+ *
1040
+ * @since 2.5.0
1041
+ *
1042
+ * @param string $file_path Path within wp-plugins/ to main plugin file.
1043
+ * @param string $slug Plugin slug.
1044
+ * @param bool $automatic Whether this is an automatic activation after an install. Defaults to false.
1045
+ * This determines the styling of the output messages.
1046
+ * @return bool False if an error was encountered, true otherwise.
1047
+ */
1048
+ protected function activate_single_plugin( $file_path, $slug, $automatic = false ) {
1049
+ if ( $this->can_plugin_activate( $slug ) ) {
1050
+ $activate = activate_plugin( $file_path );
1051
+
1052
+ if ( is_wp_error( $activate ) ) {
1053
+ echo '<div id="message" class="error"><p>', wp_kses_post( $activate->get_error_message() ), '</p></div>',
1054
+ '<p><a href="', esc_url( $this->get_tgmpa_url() ), '" target="_parent">', esc_html( $this->strings['return'] ), '</a></p>';
1055
+
1056
+ return false; // End it here if there is an error with activation.
1057
+ } else {
1058
+ if ( ! $automatic ) {
1059
+ // Make sure message doesn't display again if bulk activation is performed
1060
+ // immediately after a single activation.
1061
+ if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK.
1062
+ echo '<div id="message" class="updated"><p>', esc_html( $this->strings['activated_successfully'] ), ' <strong>', esc_html( $this->plugins[ $slug ]['name'] ), '.</strong></p></div>';
1063
+ }
1064
+ } else {
1065
+ // Simpler message layout for use on the plugin install page.
1066
+ echo '<p>', esc_html( $this->strings['plugin_activated'] ), '</p>';
1067
+ }
1068
+ }
1069
+ } elseif ( $this->is_plugin_active( $slug ) ) {
1070
+ // No simpler message format provided as this message should never be encountered
1071
+ // on the plugin install page.
1072
+ echo '<div id="message" class="error"><p>',
1073
+ sprintf(
1074
+ esc_html( $this->strings['plugin_already_active'] ),
1075
+ '<strong>' . esc_html( $this->plugins[ $slug ]['name'] ) . '</strong>'
1076
+ ),
1077
+ '</p></div>';
1078
+ } elseif ( $this->does_plugin_require_update( $slug ) ) {
1079
+ if ( ! $automatic ) {
1080
+ // Make sure message doesn't display again if bulk activation is performed
1081
+ // immediately after a single activation.
1082
+ if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK.
1083
+ echo '<div id="message" class="error"><p>',
1084
+ sprintf(
1085
+ esc_html( $this->strings['plugin_needs_higher_version'] ),
1086
+ '<strong>' . esc_html( $this->plugins[ $slug ]['name'] ) . '</strong>'
1087
+ ),
1088
+ '</p></div>';
1089
+ }
1090
+ } else {
1091
+ // Simpler message layout for use on the plugin install page.
1092
+ echo '<p>', sprintf( esc_html( $this->strings['plugin_needs_higher_version'] ), esc_html( $this->plugins[ $slug ]['name'] ) ), '</p>';
1093
+ }
1094
+ }
1095
+
1096
+ return true;
1097
+ }
1098
+
1099
+ /**
1100
+ * Echoes required plugin notice.
1101
+ *
1102
+ * Outputs a message telling users that a specific plugin is required for
1103
+ * their theme. If appropriate, it includes a link to the form page where
1104
+ * users can install and activate the plugin.
1105
+ *
1106
+ * Returns early if we're on the Install page.
1107
+ *
1108
+ * @since 1.0.0
1109
+ *
1110
+ * @global object $current_screen
1111
+ *
1112
+ * @return null Returns early if we're on the Install page.
1113
+ */
1114
+ public function notices() {
1115
+ // Remove nag on the install page / Return early if the nag message has been dismissed or user < author.
1116
+ if ( ( $this->is_tgmpa_page() || $this->is_core_update_page() ) || get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) || ! current_user_can( apply_filters( 'tgmpa_show_admin_notice_capability', 'publish_posts' ) ) ) {
1117
+ return;
1118
+ }
1119
+
1120
+ // Store for the plugin slugs by message type.
1121
+ $message = array();
1122
+
1123
+ // Initialize counters used to determine plurality of action link texts.
1124
+ $install_link_count = 0;
1125
+ $update_link_count = 0;
1126
+ $activate_link_count = 0;
1127
+ $total_required_action_count = 0;
1128
+
1129
+ foreach ( $this->plugins as $slug => $plugin ) {
1130
+ if ( $this->is_plugin_active( $slug ) && false === $this->does_plugin_have_update( $slug ) ) {
1131
+ continue;
1132
+ }
1133
+
1134
+ if ( ! $this->is_plugin_installed( $slug ) ) {
1135
+ if ( current_user_can( 'install_plugins' ) ) {
1136
+ $install_link_count++;
1137
+
1138
+ if ( true === $plugin['required'] ) {
1139
+ $message['notice_can_install_required'][] = $slug;
1140
+ } else {
1141
+ $message['notice_can_install_recommended'][] = $slug;
1142
+ }
1143
+ }
1144
+ if ( true === $plugin['required'] ) {
1145
+ $total_required_action_count++;
1146
+ }
1147
+ } else {
1148
+ if ( ! $this->is_plugin_active( $slug ) && $this->can_plugin_activate( $slug ) ) {
1149
+ if ( current_user_can( 'activate_plugins' ) ) {
1150
+ $activate_link_count++;
1151
+
1152
+ if ( true === $plugin['required'] ) {
1153
+ $message['notice_can_activate_required'][] = $slug;
1154
+ } else {
1155
+ $message['notice_can_activate_recommended'][] = $slug;
1156
+ }
1157
+ }
1158
+ if ( true === $plugin['required'] ) {
1159
+ $total_required_action_count++;
1160
+ }
1161
+ }
1162
+
1163
+ if ( $this->does_plugin_require_update( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) {
1164
+
1165
+ if ( current_user_can( 'update_plugins' ) ) {
1166
+ $update_link_count++;
1167
+
1168
+ if ( $this->does_plugin_require_update( $slug ) ) {
1169
+ $message['notice_ask_to_update'][] = $slug;
1170
+ } elseif ( false !== $this->does_plugin_have_update( $slug ) ) {
1171
+ $message['notice_ask_to_update_maybe'][] = $slug;
1172
+ }
1173
+ }
1174
+ if ( true === $plugin['required'] ) {
1175
+ $total_required_action_count++;
1176
+ }
1177
+ }
1178
+ }
1179
+ }
1180
+ unset( $slug, $plugin );
1181
+
1182
+ // If we have notices to display, we move forward.
1183
+ if ( ! empty( $message ) || $total_required_action_count > 0 ) {
1184
+ krsort( $message ); // Sort messages.
1185
+ $rendered = '';
1186
+
1187
+ // As add_settings_error() wraps the final message in a <p> and as the final message can't be
1188
+ // filtered, using <p>'s in our html would render invalid html output.
1189
+ $line_template = '<span style="display: block; margin: 0.5em 0.5em 0 0; clear: both;">%s</span>' . "\n";
1190
+
1191
+ if ( ! current_user_can( 'activate_plugins' ) && ! current_user_can( 'install_plugins' ) && ! current_user_can( 'update_plugins' ) ) {
1192
+ $rendered = esc_html( $this->strings['notice_cannot_install_activate'] ) . ' ' . esc_html( $this->strings['contact_admin'] );
1193
+ $rendered .= $this->create_user_action_links_for_notice( 0, 0, 0, $line_template );
1194
+ } else {
1195
+
1196
+ // If dismissable is false and a message is set, output it now.
1197
+ if ( ! $this->dismissable && ! empty( $this->dismiss_msg ) ) {
1198
+ $rendered .= sprintf( $line_template, wp_kses_post( $this->dismiss_msg ) );
1199
+ }
1200
+
1201
+ // Render the individual message lines for the notice.
1202
+ foreach ( $message as $type => $plugin_group ) {
1203
+ $linked_plugins = array();
1204
+
1205
+ // Get the external info link for a plugin if one is available.
1206
+ foreach ( $plugin_group as $plugin_slug ) {
1207
+ $linked_plugins[] = $this->get_info_link( $plugin_slug );
1208
+ }
1209
+ unset( $plugin_slug );
1210
+
1211
+ $count = count( $plugin_group );
1212
+ $linked_plugins = array_map( array( 'TGMPA_Utils', 'wrap_in_em' ), $linked_plugins );
1213
+ $last_plugin = array_pop( $linked_plugins ); // Pop off last name to prep for readability.
1214
+ $imploded = empty( $linked_plugins ) ? $last_plugin : ( implode( ', ', $linked_plugins ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'tgmpa' ) . ' ' . $last_plugin );
1215
+
1216
+ $rendered .= sprintf(
1217
+ $line_template,
1218
+ sprintf(
1219
+ translate_nooped_plural( $this->strings[ $type ], $count, 'tgmpa' ),
1220
+ $imploded,
1221
+ $count
1222
+ )
1223
+ );
1224
+
1225
+ }
1226
+ unset( $type, $plugin_group, $linked_plugins, $count, $last_plugin, $imploded );
1227
+
1228
+ $rendered .= $this->create_user_action_links_for_notice( $install_link_count, $update_link_count, $activate_link_count, $line_template );
1229
+ }
1230
+
1231
+ // Register the nag messages and prepare them to be processed.
1232
+ add_settings_error( 'tgmpa', 'tgmpa', $rendered, $this->get_admin_notice_class() );
1233
+ }
1234
+
1235
+ // Admin options pages already output settings_errors, so this is to avoid duplication.
1236
+ if ( 'options-general' !== $GLOBALS['current_screen']->parent_base ) {
1237
+ $this->display_settings_errors();
1238
+ }
1239
+ }
1240
+
1241
+ /**
1242
+ * Generate the user action links for the admin notice.
1243
+ *
1244
+ * @since 2.6.0
1245
+ *
1246
+ * @param int $install_count Number of plugins to install.
1247
+ * @param int $update_count Number of plugins to update.
1248
+ * @param int $activate_count Number of plugins to activate.
1249
+ * @param int $line_template Template for the HTML tag to output a line.
1250
+ * @return string Action links.
1251
+ */
1252
+ protected function create_user_action_links_for_notice( $install_count, $update_count, $activate_count, $line_template ) {
1253
+ // Setup action links.
1254
+ $action_links = array(
1255
+ 'install' => '',
1256
+ 'update' => '',
1257
+ 'activate' => '',
1258
+ 'dismiss' => $this->dismissable ? '<a href="' . esc_url( wp_nonce_url( add_query_arg( 'tgmpa-dismiss', 'dismiss_admin_notices' ), 'tgmpa-dismiss-' . get_current_user_id() ) ) . '" class="dismiss-notice" target="_parent">' . esc_html( $this->strings['dismiss'] ) . '</a>' : '',
1259
+ );
1260
+
1261
+ $link_template = '<a href="%2$s">%1$s</a>';
1262
+
1263
+ if ( current_user_can( 'install_plugins' ) ) {
1264
+ if ( $install_count > 0 ) {
1265
+ $action_links['install'] = sprintf(
1266
+ $link_template,
1267
+ translate_nooped_plural( $this->strings['install_link'], $install_count, 'tgmpa' ),
1268
+ esc_url( $this->get_tgmpa_status_url( 'install' ) )
1269
+ );
1270
+ }
1271
+ if ( $update_count > 0 ) {
1272
+ $action_links['update'] = sprintf(
1273
+ $link_template,
1274
+ translate_nooped_plural( $this->strings['update_link'], $update_count, 'tgmpa' ),
1275
+ esc_url( $this->get_tgmpa_status_url( 'update' ) )
1276
+ );
1277
+ }
1278
+ }
1279
+
1280
+ if ( current_user_can( 'activate_plugins' ) && $activate_count > 0 ) {
1281
+ $action_links['activate'] = sprintf(
1282
+ $link_template,
1283
+ translate_nooped_plural( $this->strings['activate_link'], $activate_count, 'tgmpa' ),
1284
+ esc_url( $this->get_tgmpa_status_url( 'activate' ) )
1285
+ );
1286
+ }
1287
+
1288
+ $action_links = apply_filters( 'tgmpa_notice_action_links', $action_links );
1289
+
1290
+ $action_links = array_filter( (array) $action_links ); // Remove any empty array items.
1291
+
1292
+ if ( ! empty( $action_links ) ) {
1293
+ $action_links = sprintf( $line_template, implode( ' | ', $action_links ) );
1294
+ return apply_filters( 'tgmpa_notice_rendered_action_links', $action_links );
1295
+ } else {
1296
+ return '';
1297
+ }
1298
+ }
1299
+
1300
+ /**
1301
+ * Get admin notice class.
1302
+ *
1303
+ * Work around all the changes to the various admin notice classes between WP 4.4 and 3.7
1304
+ * (lowest supported version by TGMPA).
1305
+ *
1306
+ * @since 2.6.0
1307
+ *
1308
+ * @return string
1309
+ */
1310
+ protected function get_admin_notice_class() {
1311
+ if ( ! empty( $this->strings['nag_type'] ) ) {
1312
+ return sanitize_html_class( strtolower( $this->strings['nag_type'] ) );
1313
+ } else {
1314
+ if ( version_compare( $this->wp_version, '4.2', '>=' ) ) {
1315
+ return 'notice-warning';
1316
+ } elseif ( version_compare( $this->wp_version, '4.1', '>=' ) ) {
1317
+ return 'notice';
1318
+ } else {
1319
+ return 'updated';
1320
+ }
1321
+ }
1322
+ }
1323
+
1324
+ /**
1325
+ * Display settings errors and remove those which have been displayed to avoid duplicate messages showing
1326
+ *
1327
+ * @since 2.5.0
1328
+ */
1329
+ protected function display_settings_errors() {
1330
+ global $wp_settings_errors;
1331
+
1332
+ settings_errors( 'tgmpa' );
1333
+
1334
+ foreach ( (array) $wp_settings_errors as $key => $details ) {
1335
+ if ( 'tgmpa' === $details['setting'] ) {
1336
+ unset( $wp_settings_errors[ $key ] );
1337
+ break;
1338
+ }
1339
+ }
1340
+ }
1341
+
1342
+ /**
1343
+ * Register dismissal of admin notices.
1344
+ *
1345
+ * Acts on the dismiss link in the admin nag messages.
1346
+ * If clicked, the admin notice disappears and will no longer be visible to this user.
1347
+ *
1348
+ * @since 2.1.0
1349
+ */
1350
+ public function dismiss() {
1351
+ if ( isset( $_GET['tgmpa-dismiss'] ) && check_admin_referer( 'tgmpa-dismiss-' . get_current_user_id() ) ) {
1352
+ update_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, 1 );
1353
+ }
1354
+ }
1355
+
1356
+ /**
1357
+ * Add individual plugin to our collection of plugins.
1358
+ *
1359
+ * If the required keys are not set or the plugin has already
1360
+ * been registered, the plugin is not added.
1361
+ *
1362
+ * @since 2.0.0
1363
+ *
1364
+ * @param array|null $plugin Array of plugin arguments or null if invalid argument.
1365
+ * @return null Return early if incorrect argument.
1366
+ */
1367
+ public function register( $plugin ) {
1368
+ if ( empty( $plugin['slug'] ) || empty( $plugin['name'] ) ) {
1369
+ return;
1370
+ }
1371
+
1372
+ if ( empty( $plugin['slug'] ) || ! is_string( $plugin['slug'] ) || isset( $this->plugins[ $plugin['slug'] ] ) ) {
1373
+ return;
1374
+ }
1375
+
1376
+ $defaults = array(
1377
+ 'name' => '', // String
1378
+ 'slug' => '', // String
1379
+ 'source' => 'repo', // String
1380
+ 'required' => false, // Boolean
1381
+ 'version' => '', // String
1382
+ 'force_activation' => false, // Boolean
1383
+ 'force_deactivation' => false, // Boolean
1384
+ 'external_url' => '', // String
1385
+ 'is_callable' => '', // String|Array.
1386
+ );
1387
+
1388
+ // Prepare the received data.
1389
+ $plugin = wp_parse_args( $plugin, $defaults );
1390
+
1391
+ // Standardize the received slug.
1392
+ $plugin['slug'] = $this->sanitize_key( $plugin['slug'] );
1393
+
1394
+ // Forgive users for using string versions of booleans or floats for version number.
1395
+ $plugin['version'] = (string) $plugin['version'];
1396
+ $plugin['source'] = empty( $plugin['source'] ) ? 'repo' : $plugin['source'];
1397
+ $plugin['required'] = TGMPA_Utils::validate_bool( $plugin['required'] );
1398
+ $plugin['force_activation'] = TGMPA_Utils::validate_bool( $plugin['force_activation'] );
1399
+ $plugin['force_deactivation'] = TGMPA_Utils::validate_bool( $plugin['force_deactivation'] );
1400
+
1401
+ // Enrich the received data.
1402
+ $plugin['file_path'] = $this->_get_plugin_basename_from_slug( $plugin['slug'] );
1403
+ $plugin['source_type'] = $this->get_plugin_source_type( $plugin['source'] );
1404
+
1405
+ // Set the class properties.
1406
+ $this->plugins[ $plugin['slug'] ] = $plugin;
1407
+ $this->sort_order[ $plugin['slug'] ] = $plugin['name'];
1408
+
1409
+ // Should we add the force activation hook ?
1410
+ if ( true === $plugin['force_activation'] ) {
1411
+ $this->has_forced_activation = true;
1412
+ }
1413
+
1414
+ // Should we add the force deactivation hook ?
1415
+ if ( true === $plugin['force_deactivation'] ) {
1416
+ $this->has_forced_deactivation = true;
1417
+ }
1418
+ }
1419
+
1420
+ /**
1421
+ * Determine what type of source the plugin comes from.
1422
+ *
1423
+ * @since 2.5.0
1424
+ *
1425
+ * @param string $source The source of the plugin as provided, either empty (= WP repo), a file path
1426
+ * (= bundled) or an external URL.
1427
+ * @return string 'repo', 'external', or 'bundled'
1428
+ */
1429
+ protected function get_plugin_source_type( $source ) {
1430
+ if ( 'repo' === $source || preg_match( self::WP_REPO_REGEX, $source ) ) {
1431
+ return 'repo';
1432
+ } elseif ( preg_match( self::IS_URL_REGEX, $source ) ) {
1433
+ return 'external';
1434
+ } else {
1435
+ return 'bundled';
1436
+ }
1437
+ }
1438
+
1439
+ /**
1440
+ * Sanitizes a string key.
1441
+ *
1442
+ * Near duplicate of WP Core `sanitize_key()`. The difference is that uppercase characters *are*
1443
+ * allowed, so as not to break upgrade paths from non-standard bundled plugins using uppercase
1444
+ * characters in the plugin directory path/slug. Silly them.
1445
+ *
1446
+ * @see https://developer.wordpress.org/reference/hooks/sanitize_key/
1447
+ *
1448
+ * @since 2.5.0
1449
+ *
1450
+ * @param string $key String key.
1451
+ * @return string Sanitized key
1452
+ */
1453
+ public function sanitize_key( $key ) {
1454
+ $raw_key = $key;
1455
+ $key = preg_replace( '`[^A-Za-z0-9_-]`', '', $key );
1456
+
1457
+ /**
1458
+ * Filter a sanitized key string.
1459
+ *
1460
+ * @since 2.5.0
1461
+ *
1462
+ * @param string $key Sanitized key.
1463
+ * @param string $raw_key The key prior to sanitization.
1464
+ */
1465
+ return apply_filters( 'tgmpa_sanitize_key', $key, $raw_key );
1466
+ }
1467
+
1468
+ /**
1469
+ * Amend default configuration settings.
1470
+ *
1471
+ * @since 2.0.0
1472
+ *
1473
+ * @param array $config Array of config options to pass as class properties.
1474
+ */
1475
+ public function config( $config ) {
1476
+ $keys = array(
1477
+ 'id',
1478
+ 'default_path',
1479
+ 'has_notices',
1480
+ 'dismissable',
1481
+ 'dismiss_msg',
1482
+ 'menu',
1483
+ 'parent_slug',
1484
+ 'capability',
1485
+ 'is_automatic',
1486
+ 'message',
1487
+ 'strings',
1488
+ );
1489
+
1490
+ foreach ( $keys as $key ) {
1491
+ if ( isset( $config[ $key ] ) ) {
1492
+ if ( is_array( $config[ $key ] ) ) {
1493
+ $this->$key = array_merge( $this->$key, $config[ $key ] );
1494
+ } else {
1495
+ $this->$key = $config[ $key ];
1496
+ }
1497
+ }
1498
+ }
1499
+ }
1500
+
1501
+ /**
1502
+ * Amend action link after plugin installation.
1503
+ *
1504
+ * @since 2.0.0
1505
+ *
1506
+ * @param array $install_actions Existing array of actions.
1507
+ * @return false|array Amended array of actions.
1508
+ */
1509
+ public function actions( $install_actions ) {
1510
+ // Remove action links on the TGMPA install page.
1511
+ if ( $this->is_tgmpa_page() ) {
1512
+ return false;
1513
+ }
1514
+
1515
+ return $install_actions;
1516
+ }
1517
+
1518
+ /**
1519
+ * Flushes the plugins cache on theme switch to prevent stale entries
1520
+ * from remaining in the plugin table.
1521
+ *
1522
+ * @since 2.4.0
1523
+ *
1524
+ * @param bool $clear_update_cache Optional. Whether to clear the Plugin updates cache.
1525
+ * Parameter added in v2.5.0.
1526
+ */
1527
+ public function flush_plugins_cache( $clear_update_cache = true ) {
1528
+ wp_clean_plugins_cache( $clear_update_cache );
1529
+ }
1530
+
1531
+ /**
1532
+ * Set file_path key for each installed plugin.
1533
+ *
1534
+ * @since 2.1.0
1535
+ *
1536
+ * @param string $plugin_slug Optional. If set, only (re-)populates the file path for that specific plugin.
1537
+ * Parameter added in v2.5.0.
1538
+ */
1539
+ public function populate_file_path( $plugin_slug = '' ) {
1540
+ if ( ! empty( $plugin_slug ) && is_string( $plugin_slug ) && isset( $this->plugins[ $plugin_slug ] ) ) {
1541
+ $this->plugins[ $plugin_slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $plugin_slug );
1542
+ } else {
1543
+ // Add file_path key for all plugins.
1544
+ foreach ( $this->plugins as $slug => $values ) {
1545
+ $this->plugins[ $slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $slug );
1546
+ }
1547
+ }
1548
+ }
1549
+
1550
+ /**
1551
+ * Helper function to extract the file path of the plugin file from the
1552
+ * plugin slug, if the plugin is installed.
1553
+ *
1554
+ * @since 2.0.0
1555
+ *
1556
+ * @param string $slug Plugin slug (typically folder name) as provided by the developer.
1557
+ * @return string Either file path for plugin if installed, or just the plugin slug.
1558
+ */
1559
+ protected function _get_plugin_basename_from_slug( $slug ) {
1560
+ $keys = array_keys( $this->get_plugins() );
1561
+
1562
+ foreach ( $keys as $key ) {
1563
+ if ( preg_match( '|^' . $slug . '/|', $key ) ) {
1564
+ return $key;
1565
+ }
1566
+ }
1567
+
1568
+ return $slug;
1569
+ }
1570
+
1571
+ /**
1572
+ * Retrieve plugin data, given the plugin name.
1573
+ *
1574
+ * Loops through the registered plugins looking for $name. If it finds it,
1575
+ * it returns the $data from that plugin. Otherwise, returns false.
1576
+ *
1577
+ * @since 2.1.0
1578
+ *
1579
+ * @param string $name Name of the plugin, as it was registered.
1580
+ * @param string $data Optional. Array key of plugin data to return. Default is slug.
1581
+ * @return string|boolean Plugin slug if found, false otherwise.
1582
+ */
1583
+ public function _get_plugin_data_from_name( $name, $data = 'slug' ) {
1584
+ foreach ( $this->plugins as $values ) {
1585
+ if ( $name === $values['name'] && isset( $values[ $data ] ) ) {
1586
+ return $values[ $data ];
1587
+ }
1588
+ }
1589
+
1590
+ return false;
1591
+ }
1592
+
1593
+ /**
1594
+ * Retrieve the download URL for a package.
1595
+ *
1596
+ * @since 2.5.0
1597
+ *
1598
+ * @param string $slug Plugin slug.
1599
+ * @return string Plugin download URL or path to local file or empty string if undetermined.
1600
+ */
1601
+ public function get_download_url( $slug ) {
1602
+ $dl_source = '';
1603
+
1604
+ switch ( $this->plugins[ $slug ]['source_type'] ) {
1605
+ case 'repo':
1606
+ return $this->get_wp_repo_download_url( $slug );
1607
+ case 'external':
1608
+ return $this->plugins[ $slug ]['source'];
1609
+ case 'bundled':
1610
+ return $this->default_path . $this->plugins[ $slug ]['source'];
1611
+ }
1612
+
1613
+ return $dl_source; // Should never happen.
1614
+ }
1615
+
1616
+ /**
1617
+ * Retrieve the download URL for a WP repo package.
1618
+ *
1619
+ * @since 2.5.0
1620
+ *
1621
+ * @param string $slug Plugin slug.
1622
+ * @return string Plugin download URL.
1623
+ */
1624
+ protected function get_wp_repo_download_url( $slug ) {
1625
+ $source = '';
1626
+ $api = $this->get_plugins_api( $slug );
1627
+
1628
+ if ( false !== $api && isset( $api->download_link ) ) {
1629
+ $source = $api->download_link;
1630
+ }
1631
+
1632
+ return $source;
1633
+ }
1634
+
1635
+ /**
1636
+ * Try to grab information from WordPress API.
1637
+ *
1638
+ * @since 2.5.0
1639
+ *
1640
+ * @param string $slug Plugin slug.
1641
+ * @return object Plugins_api response object on success, WP_Error on failure.
1642
+ */
1643
+ protected function get_plugins_api( $slug ) {
1644
+ static $api = array(); // Cache received responses.
1645
+
1646
+ if ( ! isset( $api[ $slug ] ) ) {
1647
+ if ( ! function_exists( 'plugins_api' ) ) {
1648
+ require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
1649
+ }
1650
+
1651
+ $response = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false ) ) );
1652
+
1653
+ $api[ $slug ] = false;
1654
+
1655
+ if ( is_wp_error( $response ) ) {
1656
+ wp_die( esc_html( $this->strings['oops'] ) );
1657
+ } else {
1658
+ $api[ $slug ] = $response;
1659
+ }
1660
+ }
1661
+
1662
+ return $api[ $slug ];
1663
+ }
1664
+
1665
+ /**
1666
+ * Retrieve a link to a plugin information page.
1667
+ *
1668
+ * @since 2.5.0
1669
+ *
1670
+ * @param string $slug Plugin slug.
1671
+ * @return string Fully formed html link to a plugin information page if available
1672
+ * or the plugin name if not.
1673
+ */
1674
+ public function get_info_link( $slug ) {
1675
+ if ( ! empty( $this->plugins[ $slug ]['external_url'] ) && preg_match( self::IS_URL_REGEX, $this->plugins[ $slug ]['external_url'] ) ) {
1676
+ $link = sprintf(
1677
+ '<a href="%1$s" target="_blank">%2$s</a>',
1678
+ esc_url( $this->plugins[ $slug ]['external_url'] ),
1679
+ esc_html( $this->plugins[ $slug ]['name'] )
1680
+ );
1681
+ } elseif ( 'repo' === $this->plugins[ $slug ]['source_type'] ) {
1682
+ $url = add_query_arg(
1683
+ array(
1684
+ 'tab' => 'plugin-information',
1685
+ 'plugin' => urlencode( $slug ),
1686
+ 'TB_iframe' => 'true',
1687
+ 'width' => '640',
1688
+ 'height' => '500',
1689
+ ),
1690
+ self_admin_url( 'plugin-install.php' )
1691
+ );
1692
+
1693
+ $link = sprintf(
1694
+ '<a href="%1$s" class="thickbox">%2$s</a>',
1695
+ esc_url( $url ),
1696
+ esc_html( $this->plugins[ $slug ]['name'] )
1697
+ );
1698
+ } else {
1699
+ $link = esc_html( $this->plugins[ $slug ]['name'] ); // No hyperlink.
1700
+ }
1701
+
1702
+ return $link;
1703
+ }
1704
+
1705
+ /**
1706
+ * Determine if we're on the TGMPA Install page.
1707
+ *
1708
+ * @since 2.1.0
1709
+ *
1710
+ * @return boolean True when on the TGMPA page, false otherwise.
1711
+ */
1712
+ protected function is_tgmpa_page() {
1713
+ return isset( $_GET['page'] ) && $this->menu === $_GET['page'];
1714
+ }
1715
+
1716
+ /**
1717
+ * Determine if we're on a WP Core installation/upgrade page.
1718
+ *
1719
+ * @since 2.6.0
1720
+ *
1721
+ * @return boolean True when on a WP Core installation/upgrade page, false otherwise.
1722
+ */
1723
+ protected function is_core_update_page() {
1724
+ // Current screen is not always available, most notably on the customizer screen.
1725
+ if ( ! function_exists( 'get_current_screen' ) ) {
1726
+ return false;
1727
+ }
1728
+
1729
+ $screen = get_current_screen();
1730
+
1731
+ if ( 'update-core' === $screen->base ) {
1732
+ // Core update screen.
1733
+ return true;
1734
+ } elseif ( 'plugins' === $screen->base && ! empty( $_POST['action'] ) ) { // WPCS: CSRF ok.
1735
+ // Plugins bulk update screen.
1736
+ return true;
1737
+ } elseif ( 'update' === $screen->base && ! empty( $_POST['action'] ) ) { // WPCS: CSRF ok.
1738
+ // Individual updates (ajax call).
1739
+ return true;
1740
+ }
1741
+
1742
+ return false;
1743
+ }
1744
+
1745
+ /**
1746
+ * Retrieve the URL to the TGMPA Install page.
1747
+ *
1748
+ * I.e. depending on the config settings passed something along the lines of:
1749
+ * http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins
1750
+ *
1751
+ * @since 2.5.0
1752
+ *
1753
+ * @return string Properly encoded URL (not escaped).
1754
+ */
1755
+ public function get_tgmpa_url() {
1756
+ static $url;
1757
+
1758
+ if ( ! isset( $url ) ) {
1759
+ $parent = $this->parent_slug;
1760
+ if ( false === strpos( $parent, '.php' ) ) {
1761
+ $parent = 'admin.php';
1762
+ }
1763
+ $url = add_query_arg(
1764
+ array(
1765
+ 'page' => urlencode( $this->menu ),
1766
+ ),
1767
+ self_admin_url( $parent )
1768
+ );
1769
+ }
1770
+
1771
+ return $url;
1772
+ }
1773
+
1774
+ /**
1775
+ * Retrieve the URL to the TGMPA Install page for a specific plugin status (view).
1776
+ *
1777
+ * I.e. depending on the config settings passed something along the lines of:
1778
+ * http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins&plugin_status=install
1779
+ *
1780
+ * @since 2.5.0
1781
+ *
1782
+ * @param string $status Plugin status - either 'install', 'update' or 'activate'.
1783
+ * @return string Properly encoded URL (not escaped).
1784
+ */
1785
+ public function get_tgmpa_status_url( $status ) {
1786
+ return add_query_arg(
1787
+ array(
1788
+ 'plugin_status' => urlencode( $status ),
1789
+ ),
1790
+ $this->get_tgmpa_url()
1791
+ );
1792
+ }
1793
+
1794
+ /**
1795
+ * Determine whether there are open actions for plugins registered with TGMPA.
1796
+ *
1797
+ * @since 2.5.0
1798
+ *
1799
+ * @return bool True if complete, i.e. no outstanding actions. False otherwise.
1800
+ */
1801
+ public function is_tgmpa_complete() {
1802
+ $complete = true;
1803
+ foreach ( $this->plugins as $slug => $plugin ) {
1804
+ if ( ! $this->is_plugin_active( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) {
1805
+ $complete = false;
1806
+ break;
1807
+ }
1808
+ }
1809
+
1810
+ return $complete;
1811
+ }
1812
+
1813
+ /**
1814
+ * Check if a plugin is installed. Does not take must-use plugins into account.
1815
+ *
1816
+ * @since 2.5.0
1817
+ *
1818
+ * @param string $slug Plugin slug.
1819
+ * @return bool True if installed, false otherwise.
1820
+ */
1821
+ public function is_plugin_installed( $slug ) {
1822
+ $installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached).
1823
+
1824
+ return ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ] ) );
1825
+ }
1826
+
1827
+ /**
1828
+ * Check if a plugin is active.
1829
+ *
1830
+ * @since 2.5.0
1831
+ *
1832
+ * @param string $slug Plugin slug.
1833
+ * @return bool True if active, false otherwise.
1834
+ */
1835
+ public function is_plugin_active( $slug ) {
1836
+ return ( ( ! empty( $this->plugins[ $slug ]['is_callable'] ) && is_callable( $this->plugins[ $slug ]['is_callable'] ) ) || is_plugin_active( $this->plugins[ $slug ]['file_path'] ) );
1837
+ }
1838
+
1839
+ /**
1840
+ * Check if a plugin can be updated, i.e. if we have information on the minimum WP version required
1841
+ * available, check whether the current install meets them.
1842
+ *
1843
+ * @since 2.5.0
1844
+ *
1845
+ * @param string $slug Plugin slug.
1846
+ * @return bool True if OK to update, false otherwise.
1847
+ */
1848
+ public function can_plugin_update( $slug ) {
1849
+ // We currently can't get reliable info on non-WP-repo plugins - issue #380.
1850
+ if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) {
1851
+ return true;
1852
+ }
1853
+
1854
+ $api = $this->get_plugins_api( $slug );
1855
+
1856
+ if ( false !== $api && isset( $api->requires ) ) {
1857
+ return version_compare( $this->wp_version, $api->requires, '>=' );
1858
+ }
1859
+
1860
+ // No usable info received from the plugins API, presume we can update.
1861
+ return true;
1862
+ }
1863
+
1864
+ /**
1865
+ * Check to see if the plugin is 'updatetable', i.e. installed, with an update available
1866
+ * and no WP version requirements blocking it.
1867
+ *
1868
+ * @since 2.6.0
1869
+ *
1870
+ * @param string $slug Plugin slug.
1871
+ * @return bool True if OK to proceed with update, false otherwise.
1872
+ */
1873
+ public function is_plugin_updatetable( $slug ) {
1874
+ if ( ! $this->is_plugin_installed( $slug ) ) {
1875
+ return false;
1876
+ } else {
1877
+ return ( false !== $this->does_plugin_have_update( $slug ) && $this->can_plugin_update( $slug ) );
1878
+ }
1879
+ }
1880
+
1881
+ /**
1882
+ * Check if a plugin can be activated, i.e. is not currently active and meets the minimum
1883
+ * plugin version requirements set in TGMPA (if any).
1884
+ *
1885
+ * @since 2.5.0
1886
+ *
1887
+ * @param string $slug Plugin slug.
1888
+ * @return bool True if OK to activate, false otherwise.
1889
+ */
1890
+ public function can_plugin_activate( $slug ) {
1891
+ return ( ! $this->is_plugin_active( $slug ) && ! $this->does_plugin_require_update( $slug ) );
1892
+ }
1893
+
1894
+ /**
1895
+ * Retrieve the version number of an installed plugin.
1896
+ *
1897
+ * @since 2.5.0
1898
+ *
1899
+ * @param string $slug Plugin slug.
1900
+ * @return string Version number as string or an empty string if the plugin is not installed
1901
+ * or version unknown (plugins which don't comply with the plugin header standard).
1902
+ */
1903
+ public function get_installed_version( $slug ) {
1904
+ $installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached).
1905
+
1906
+ if ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version'] ) ) {
1907
+ return $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version'];
1908
+ }
1909
+
1910
+ return '';
1911
+ }
1912
+
1913
+ /**
1914
+ * Check whether a plugin complies with the minimum version requirements.
1915
+ *
1916
+ * @since 2.5.0
1917
+ *
1918
+ * @param string $slug Plugin slug.
1919
+ * @return bool True when a plugin needs to be updated, otherwise false.
1920
+ */
1921
+ public function does_plugin_require_update( $slug ) {
1922
+ $installed_version = $this->get_installed_version( $slug );
1923
+ $minimum_version = $this->plugins[ $slug ]['version'];
1924
+
1925
+ return version_compare( $minimum_version, $installed_version, '>' );
1926
+ }
1927
+
1928
+ /**
1929
+ * Check whether there is an update available for a plugin.
1930
+ *
1931
+ * @since 2.5.0
1932
+ *
1933
+ * @param string $slug Plugin slug.
1934
+ * @return false|string Version number string of the available update or false if no update available.
1935
+ */
1936
+ public function does_plugin_have_update( $slug ) {
1937
+ // Presume bundled and external plugins will point to a package which meets the minimum required version.
1938
+ if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) {
1939
+ if ( $this->does_plugin_require_update( $slug ) ) {
1940
+ return $this->plugins[ $slug ]['version'];
1941
+ }
1942
+
1943
+ return false;
1944
+ }
1945
+
1946
+ $repo_updates = get_site_transient( 'update_plugins' );
1947
+
1948
+ if ( isset( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version ) ) {
1949
+ return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version;
1950
+ }
1951
+
1952
+ return false;
1953
+ }
1954
+
1955
+ /**
1956
+ * Retrieve potential upgrade notice for a plugin.
1957
+ *
1958
+ * @since 2.5.0
1959
+ *
1960
+ * @param string $slug Plugin slug.
1961
+ * @return string The upgrade notice or an empty string if no message was available or provided.
1962
+ */
1963
+ public function get_upgrade_notice( $slug ) {
1964
+ // We currently can't get reliable info on non-WP-repo plugins - issue #380.
1965
+ if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) {
1966
+ return '';
1967
+ }
1968
+
1969
+ $repo_updates = get_site_transient( 'update_plugins' );
1970
+
1971
+ if ( ! empty( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice ) ) {
1972
+ return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice;
1973
+ }
1974
+
1975
+ return '';
1976
+ }
1977
+
1978
+ /**
1979
+ * Wrapper around the core WP get_plugins function, making sure it's actually available.
1980
+ *
1981
+ * @since 2.5.0
1982
+ *
1983
+ * @param string $plugin_folder Optional. Relative path to single plugin folder.
1984
+ * @return array Array of installed plugins with plugin information.
1985
+ */
1986
+ public function get_plugins( $plugin_folder = '' ) {
1987
+ if ( ! function_exists( 'get_plugins' ) ) {
1988
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
1989
+ }
1990
+
1991
+ return get_plugins( $plugin_folder );
1992
+ }
1993
+
1994
+ /**
1995
+ * Delete dismissable nag option when theme is switched.
1996
+ *
1997
+ * This ensures that the user(s) is/are again reminded via nag of required
1998
+ * and/or recommended plugins if they re-activate the theme.
1999
+ *
2000
+ * @since 2.1.1
2001
+ */
2002
+ public function update_dismiss() {
2003
+ delete_metadata( 'user', null, 'tgmpa_dismissed_notice_' . $this->id, null, true );
2004
+ }
2005
+
2006
+ /**
2007
+ * Forces plugin activation if the parameter 'force_activation' is
2008
+ * set to true.
2009
+ *
2010
+ * This allows theme authors to specify certain plugins that must be
2011
+ * active at all times while using the current theme.
2012
+ *
2013
+ * Please take special care when using this parameter as it has the
2014
+ * potential to be harmful if not used correctly. Setting this parameter
2015
+ * to true will not allow the specified plugin to be deactivated unless
2016
+ * the user switches themes.
2017
+ *
2018
+ * @since 2.2.0
2019
+ */
2020
+ public function force_activation() {
2021
+ foreach ( $this->plugins as $slug => $plugin ) {
2022
+ if ( true === $plugin['force_activation'] ) {
2023
+ if ( ! $this->is_plugin_installed( $slug ) ) {
2024
+ // Oops, plugin isn't there so iterate to next condition.
2025
+ continue;
2026
+ } elseif ( $this->can_plugin_activate( $slug ) ) {
2027
+ // There we go, activate the plugin.
2028
+ activate_plugin( $plugin['file_path'] );
2029
+ }
2030
+ }
2031
+ }
2032
+ }
2033
+
2034
+ /**
2035
+ * Forces plugin deactivation if the parameter 'force_deactivation'
2036
+ * is set to true and adds the plugin to the 'recently active' plugins list.
2037
+ *
2038
+ * This allows theme authors to specify certain plugins that must be
2039
+ * deactivated upon switching from the current theme to another.
2040
+ *
2041
+ * Please take special care when using this parameter as it has the
2042
+ * potential to be harmful if not used correctly.
2043
+ *
2044
+ * @since 2.2.0
2045
+ */
2046
+ public function force_deactivation() {
2047
+ $deactivated = array();
2048
+
2049
+ foreach ( $this->plugins as $slug => $plugin ) {
2050
+ /*
2051
+ * Only proceed forward if the parameter is set to true and plugin is active
2052
+ * as a 'normal' (not must-use) plugin.
2053
+ */
2054
+ if ( true === $plugin['force_deactivation'] && is_plugin_active( $plugin['file_path'] ) ) {
2055
+ deactivate_plugins( $plugin['file_path'] );
2056
+ $deactivated[ $plugin['file_path'] ] = time();
2057
+ }
2058
+ }
2059
+
2060
+ if ( ! empty( $deactivated ) ) {
2061
+ update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ) );
2062
+ }
2063
+ }
2064
+
2065
+ /**
2066
+ * Echo the current TGMPA version number to the page.
2067
+ *
2068
+ * @since 2.5.0
2069
+ */
2070
+ public function show_tgmpa_version() {
2071
+ echo '<p style="float: right; padding: 0em 1.5em 0.5em 0;"><strong><small>',
2072
+ esc_html(
2073
+ sprintf(
2074
+ /* translators: %s: version number */
2075
+ __( 'TGMPA v%s', 'tgmpa' ),
2076
+ self::TGMPA_VERSION
2077
+ )
2078
+ ),
2079
+ '</small></strong></p>';
2080
+ }
2081
+
2082
+ /**
2083
+ * Returns the singleton instance of the class.
2084
+ *
2085
+ * @since 2.4.0
2086
+ *
2087
+ * @return \TGM_Plugin_Activation The TGM_Plugin_Activation object.
2088
+ */
2089
+ public static function get_instance() {
2090
+ if ( ! isset( self::$instance ) && ! ( self::$instance instanceof self ) ) {
2091
+ self::$instance = new self();
2092
+ }
2093
+
2094
+ return self::$instance;
2095
+ }
2096
+ }
2097
+
2098
+ if ( ! function_exists( 'load_tgm_plugin_activation' ) ) {
2099
+ /**
2100
+ * Ensure only one instance of the class is ever invoked.
2101
+ *
2102
+ * @since 2.5.0
2103
+ */
2104
+ function load_tgm_plugin_activation() {
2105
+ $GLOBALS['tgmpa'] = TGM_Plugin_Activation::get_instance();
2106
+ }
2107
+ }
2108
+
2109
+ if ( did_action( 'plugins_loaded' ) ) {
2110
+ load_tgm_plugin_activation();
2111
+ } else {
2112
+ add_action( 'plugins_loaded', 'load_tgm_plugin_activation' );
2113
+ }
2114
+ }
2115
+
2116
+ if ( ! function_exists( 'tgmpa' ) ) {
2117
+ /**
2118
+ * Helper function to register a collection of required plugins.
2119
+ *
2120
+ * @since 2.0.0
2121
+ * @api
2122
+ *
2123
+ * @param array $plugins An array of plugin arrays.
2124
+ * @param array $config Optional. An array of configuration values.
2125
+ */
2126
+ function tgmpa( $plugins, $config = array() ) {
2127
+ $instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
2128
+
2129
+ foreach ( $plugins as $plugin ) {
2130
+ call_user_func( array( $instance, 'register' ), $plugin );
2131
+ }
2132
+
2133
+ if ( ! empty( $config ) && is_array( $config ) ) {
2134
+ // Send out notices for deprecated arguments passed.
2135
+ if ( isset( $config['notices'] ) ) {
2136
+ _deprecated_argument( __FUNCTION__, '2.2.0', 'The `notices` config parameter was renamed to `has_notices` in TGMPA 2.2.0. Please adjust your configuration.' );
2137
+ if ( ! isset( $config['has_notices'] ) ) {
2138
+ $config['has_notices'] = $config['notices'];
2139
+ }
2140
+ }
2141
+
2142
+ if ( isset( $config['parent_menu_slug'] ) ) {
2143
+ _deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_menu_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' );
2144
+ }
2145
+ if ( isset( $config['parent_url_slug'] ) ) {
2146
+ _deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_url_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' );
2147
+ }
2148
+
2149
+ call_user_func( array( $instance, 'config' ), $config );
2150
+ }
2151
+ }
2152
+ }
2153
+
2154
+ /**
2155
+ * WP_List_Table isn't always available. If it isn't available,
2156
+ * we load it here.
2157
+ *
2158
+ * @since 2.2.0
2159
+ */
2160
+ if ( ! class_exists( 'WP_List_Table' ) ) {
2161
+ require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
2162
+ }
2163
+
2164
+ if ( ! class_exists( 'TGMPA_List_Table' ) ) {
2165
+
2166
+ /**
2167
+ * List table class for handling plugins.
2168
+ *
2169
+ * Extends the WP_List_Table class to provide a future-compatible
2170
+ * way of listing out all required/recommended plugins.
2171
+ *
2172
+ * Gives users an interface similar to the Plugin Administration
2173
+ * area with similar (albeit stripped down) capabilities.
2174
+ *
2175
+ * This class also allows for the bulk install of plugins.
2176
+ *
2177
+ * @since 2.2.0
2178
+ *
2179
+ * @package TGM-Plugin-Activation
2180
+ * @author Thomas Griffin
2181
+ * @author Gary Jones
2182
+ */
2183
+ class TGMPA_List_Table extends WP_List_Table {
2184
+ /**
2185
+ * TGMPA instance.
2186
+ *
2187
+ * @since 2.5.0
2188
+ *
2189
+ * @var object
2190
+ */
2191
+ protected $tgmpa;
2192
+
2193
+ /**
2194
+ * The currently chosen view.
2195
+ *
2196
+ * @since 2.5.0
2197
+ *
2198
+ * @var string One of: 'all', 'install', 'update', 'activate'
2199
+ */
2200
+ public $view_context = 'all';
2201
+
2202
+ /**
2203
+ * The plugin counts for the various views.
2204
+ *
2205
+ * @since 2.5.0
2206
+ *
2207
+ * @var array
2208
+ */
2209
+ protected $view_totals = array(
2210
+ 'all' => 0,
2211
+ 'install' => 0,
2212
+ 'update' => 0,
2213
+ 'activate' => 0,
2214
+ );
2215
+
2216
+ /**
2217
+ * References parent constructor and sets defaults for class.
2218
+ *
2219
+ * @since 2.2.0
2220
+ */
2221
+ public function __construct() {
2222
+ $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
2223
+
2224
+ parent::__construct(
2225
+ array(
2226
+ 'singular' => 'plugin',
2227
+ 'plural' => 'plugins',
2228
+ 'ajax' => false,
2229
+ )
2230
+ );
2231
+
2232
+ if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'install', 'update', 'activate' ), true ) ) {
2233
+ $this->view_context = sanitize_key( $_REQUEST['plugin_status'] );
2234
+ }
2235
+
2236
+ add_filter( 'tgmpa_table_data_items', array( $this, 'sort_table_items' ) );
2237
+ }
2238
+
2239
+ /**
2240
+ * Get a list of CSS classes for the <table> tag.
2241
+ *
2242
+ * Overruled to prevent the 'plural' argument from being added.
2243
+ *
2244
+ * @since 2.5.0
2245
+ *
2246
+ * @return array CSS classnames.
2247
+ */
2248
+ public function get_table_classes() {
2249
+ return array( 'widefat', 'fixed' );
2250
+ }
2251
+
2252
+ /**
2253
+ * Gathers and renames all of our plugin information to be used by WP_List_Table to create our table.
2254
+ *
2255
+ * @since 2.2.0
2256
+ *
2257
+ * @return array $table_data Information for use in table.
2258
+ */
2259
+ protected function _gather_plugin_data() {
2260
+ // Load thickbox for plugin links.
2261
+ $this->tgmpa->admin_init();
2262
+ $this->tgmpa->thickbox();
2263
+
2264
+ // Categorize the plugins which have open actions.
2265
+ $plugins = $this->categorize_plugins_to_views();
2266
+
2267
+ // Set the counts for the view links.
2268
+ $this->set_view_totals( $plugins );
2269
+
2270
+ // Prep variables for use and grab list of all installed plugins.
2271
+ $table_data = array();
2272
+ $i = 0;
2273
+
2274
+ // Redirect to the 'all' view if no plugins were found for the selected view context.
2275
+ if ( empty( $plugins[ $this->view_context ] ) ) {
2276
+ $this->view_context = 'all';
2277
+ }
2278
+
2279
+ foreach ( $plugins[ $this->view_context ] as $slug => $plugin ) {
2280
+ $table_data[ $i ]['sanitized_plugin'] = $plugin['name'];
2281
+ $table_data[ $i ]['slug'] = $slug;
2282
+ $table_data[ $i ]['plugin'] = '<strong>' . $this->tgmpa->get_info_link( $slug ) . '</strong>';
2283
+ $table_data[ $i ]['source'] = $this->get_plugin_source_type_text( $plugin['source_type'] );
2284
+ $table_data[ $i ]['type'] = $this->get_plugin_advise_type_text( $plugin['required'] );
2285
+ $table_data[ $i ]['status'] = $this->get_plugin_status_text( $slug );
2286
+ $table_data[ $i ]['installed_version'] = $this->tgmpa->get_installed_version( $slug );
2287
+ $table_data[ $i ]['minimum_version'] = $plugin['version'];
2288
+ $table_data[ $i ]['available_version'] = $this->tgmpa->does_plugin_have_update( $slug );
2289
+
2290
+ // Prep the upgrade notice info.
2291
+ $upgrade_notice = $this->tgmpa->get_upgrade_notice( $slug );
2292
+ if ( ! empty( $upgrade_notice ) ) {
2293
+ $table_data[ $i ]['upgrade_notice'] = $upgrade_notice;
2294
+
2295
+ add_action( "tgmpa_after_plugin_row_{$slug}", array( $this, 'wp_plugin_update_row' ), 10, 2 );
2296
+ }
2297
+
2298
+ $table_data[ $i ] = apply_filters( 'tgmpa_table_data_item', $table_data[ $i ], $plugin );
2299
+
2300
+ $i++;
2301
+ }
2302
+
2303
+ return $table_data;
2304
+ }
2305
+
2306
+ /**
2307
+ * Categorize the plugins which have open actions into views for the TGMPA page.
2308
+ *
2309
+ * @since 2.5.0
2310
+ */
2311
+ protected function categorize_plugins_to_views() {
2312
+ $plugins = array(
2313
+ 'all' => array(), // Meaning: all plugins which still have open actions.
2314
+ 'install' => array(),
2315
+ 'update' => array(),
2316
+ 'activate' => array(),
2317
+ );
2318
+
2319
+ foreach ( $this->tgmpa->plugins as $slug => $plugin ) {
2320
+ if ( $this->tgmpa->is_plugin_active( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) {
2321
+ // No need to display plugins if they are installed, up-to-date and active.
2322
+ continue;
2323
+ } else {
2324
+ $plugins['all'][ $slug ] = $plugin;
2325
+
2326
+ if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) {
2327
+ $plugins['install'][ $slug ] = $plugin;
2328
+ } else {
2329
+ if ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) {
2330
+ $plugins['update'][ $slug ] = $plugin;
2331
+ }
2332
+
2333
+ if ( $this->tgmpa->can_plugin_activate( $slug ) ) {
2334
+ $plugins['activate'][ $slug ] = $plugin;
2335
+ }
2336
+ }
2337
+ }
2338
+ }
2339
+
2340
+ return $plugins;
2341
+ }
2342
+
2343
+ /**
2344
+ * Set the counts for the view links.
2345
+ *
2346
+ * @since 2.5.0
2347
+ *
2348
+ * @param array $plugins Plugins order by view.
2349
+ */
2350
+ protected function set_view_totals( $plugins ) {
2351
+ foreach ( $plugins as $type => $list ) {
2352
+ $this->view_totals[ $type ] = count( $list );
2353
+ }
2354
+ }
2355
+
2356
+ /**
2357
+ * Get the plugin required/recommended text string.
2358
+ *
2359
+ * @since 2.5.0
2360
+ *
2361
+ * @param string $required Plugin required setting.
2362
+ * @return string
2363
+ */
2364
+ protected function get_plugin_advise_type_text( $required ) {
2365
+ if ( true === $required ) {
2366
+ return __( 'Required', 'tgmpa' );
2367
+ }
2368
+
2369
+ return __( 'Recommended', 'tgmpa' );
2370
+ }
2371
+
2372
+ /**
2373
+ * Get the plugin source type text string.
2374
+ *
2375
+ * @since 2.5.0
2376
+ *
2377
+ * @param string $type Plugin type.
2378
+ * @return string
2379
+ */
2380
+ protected function get_plugin_source_type_text( $type ) {
2381
+ $string = '';
2382
+
2383
+ switch ( $type ) {
2384
+ case 'repo':
2385
+ $string = __( 'WordPress Repository', 'tgmpa' );
2386
+ break;
2387
+ case 'external':
2388
+ $string = __( 'External Source', 'tgmpa' );
2389
+ break;
2390
+ case 'bundled':
2391
+ $string = __( 'Pre-Packaged', 'tgmpa' );
2392
+ break;
2393
+ }
2394
+
2395
+ return $string;
2396
+ }
2397
+
2398
+ /**
2399
+ * Determine the plugin status message.
2400
+ *
2401
+ * @since 2.5.0
2402
+ *
2403
+ * @param string $slug Plugin slug.
2404
+ * @return string
2405
+ */
2406
+ protected function get_plugin_status_text( $slug ) {
2407
+ if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) {
2408
+ return __( 'Not Installed', 'tgmpa' );
2409
+ }
2410
+
2411
+ if ( ! $this->tgmpa->is_plugin_active( $slug ) ) {
2412
+ $install_status = __( 'Installed But Not Activated', 'tgmpa' );
2413
+ } else {
2414
+ $install_status = __( 'Active', 'tgmpa' );
2415
+ }
2416
+
2417
+ $update_status = '';
2418
+
2419
+ if ( $this->tgmpa->does_plugin_require_update( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) {
2420
+ $update_status = __( 'Required Update not Available', 'tgmpa' );
2421
+
2422
+ } elseif ( $this->tgmpa->does_plugin_require_update( $slug ) ) {
2423
+ $update_status = __( 'Requires Update', 'tgmpa' );
2424
+
2425
+ } elseif ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) {
2426
+ $update_status = __( 'Update recommended', 'tgmpa' );
2427
+ }
2428
+
2429
+ if ( '' === $update_status ) {
2430
+ return $install_status;
2431
+ }
2432
+
2433
+ return sprintf(
2434
+ /* translators: 1: install status, 2: update status */
2435
+ _x( '%1$s, %2$s', 'Install/Update Status', 'tgmpa' ),
2436
+ $install_status,
2437
+ $update_status
2438
+ );
2439
+ }
2440
+
2441
+ /**
2442
+ * Sort plugins by Required/Recommended type and by alphabetical plugin name within each type.
2443
+ *
2444
+ * @since 2.5.0
2445
+ *
2446
+ * @param array $items Prepared table items.
2447
+ * @return array Sorted table items.
2448
+ */
2449
+ public function sort_table_items( $items ) {
2450
+ $type = array();
2451
+ $name = array();
2452
+
2453
+ foreach ( $items as $i => $plugin ) {
2454
+ $type[ $i ] = $plugin['type']; // Required / recommended.
2455
+ $name[ $i ] = $plugin['sanitized_plugin'];
2456
+ }
2457
+
2458
+ array_multisort( $type, SORT_DESC, $name, SORT_ASC, $items );
2459
+
2460
+ return $items;
2461
+ }
2462
+
2463
+ /**
2464
+ * Get an associative array ( id => link ) of the views available on this table.
2465
+ *
2466
+ * @since 2.5.0
2467
+ *
2468
+ * @return array
2469
+ */
2470
+ public function get_views() {
2471
+ $status_links = array();
2472
+
2473
+ foreach ( $this->view_totals as $type => $count ) {
2474
+ if ( $count < 1 ) {
2475
+ continue;
2476
+ }
2477
+
2478
+ switch ( $type ) {
2479
+ case 'all':
2480
+ /* translators: 1: number of plugins. */
2481
+ $text = _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $count, 'plugins', 'tgmpa' );
2482
+ break;
2483
+ case 'install':
2484
+ /* translators: 1: number of plugins. */
2485
+ $text = _n( 'To Install <span class="count">(%s)</span>', 'To Install <span class="count">(%s)</span>', $count, 'tgmpa' );
2486
+ break;
2487
+ case 'update':
2488
+ /* translators: 1: number of plugins. */
2489
+ $text = _n( 'Update Available <span class="count">(%s)</span>', 'Update Available <span class="count">(%s)</span>', $count, 'tgmpa' );
2490
+ break;
2491
+ case 'activate':
2492
+ /* translators: 1: number of plugins. */
2493
+ $text = _n( 'To Activate <span class="count">(%s)</span>', 'To Activate <span class="count">(%s)</span>', $count, 'tgmpa' );
2494
+ break;
2495
+ default:
2496
+ $text = '';
2497
+ break;
2498
+ }
2499
+
2500
+ if ( ! empty( $text ) ) {
2501
+
2502
+ $status_links[ $type ] = sprintf(
2503
+ '<a href="%s"%s>%s</a>',
2504
+ esc_url( $this->tgmpa->get_tgmpa_status_url( $type ) ),
2505
+ ( $type === $this->view_context ) ? ' class="current"' : '',
2506
+ sprintf( $text, number_format_i18n( $count ) )
2507
+ );
2508
+ }
2509
+ }
2510
+
2511
+ return $status_links;
2512
+ }
2513
+
2514
+ /**
2515
+ * Create default columns to display important plugin information
2516
+ * like type, action and status.
2517
+ *
2518
+ * @since 2.2.0
2519
+ *
2520
+ * @param array $item Array of item data.
2521
+ * @param string $column_name The name of the column.
2522
+ * @return string
2523
+ */
2524
+ public function column_default( $item, $column_name ) {
2525
+ return $item[ $column_name ];
2526
+ }
2527
+
2528
+ /**
2529
+ * Required for bulk installing.
2530
+ *
2531
+ * Adds a checkbox for each plugin.
2532
+ *
2533
+ * @since 2.2.0
2534
+ *
2535
+ * @param array $item Array of item data.
2536
+ * @return string The input checkbox with all necessary info.
2537
+ */
2538
+ public function column_cb( $item ) {
2539
+ return sprintf(
2540
+ '<input type="checkbox" name="%1$s[]" value="%2$s" id="%3$s" />',
2541
+ esc_attr( $this->_args['singular'] ),
2542
+ esc_attr( $item['slug'] ),
2543
+ esc_attr( $item['sanitized_plugin'] )
2544
+ );
2545
+ }
2546
+
2547
+ /**
2548
+ * Create default title column along with the action links.
2549
+ *
2550
+ * @since 2.2.0
2551
+ *
2552
+ * @param array $item Array of item data.
2553
+ * @return string The plugin name and action links.
2554
+ */
2555
+ public function column_plugin( $item ) {
2556
+ return sprintf(
2557
+ '%1$s %2$s',
2558
+ $item['plugin'],
2559
+ $this->row_actions( $this->get_row_actions( $item ), true )
2560
+ );
2561
+ }
2562
+
2563
+ /**
2564
+ * Create version information column.
2565
+ *
2566
+ * @since 2.5.0
2567
+ *
2568
+ * @param array $item Array of item data.
2569
+ * @return string HTML-formatted version information.
2570
+ */
2571
+ public function column_version( $item ) {
2572
+ $output = array();
2573
+
2574
+ if ( $this->tgmpa->is_plugin_installed( $item['slug'] ) ) {
2575
+ $installed = ! empty( $item['installed_version'] ) ? $item['installed_version'] : _x( 'unknown', 'as in: "version nr unknown"', 'tgmpa' );
2576
+
2577
+ $color = '';
2578
+ if ( ! empty( $item['minimum_version'] ) && $this->tgmpa->does_plugin_require_update( $item['slug'] ) ) {
2579
+ $color = ' color: #ff0000; font-weight: bold;';
2580
+ }
2581
+
2582
+ $output[] = sprintf(
2583
+ '<p><span style="min-width: 32px; text-align: right; float: right;%1$s">%2$s</span>' . __( 'Installed version:', 'tgmpa' ) . '</p>',
2584
+ $color,
2585
+ $installed
2586
+ );
2587
+ }
2588
+
2589
+ if ( ! empty( $item['minimum_version'] ) ) {
2590
+ $output[] = sprintf(
2591
+ '<p><span style="min-width: 32px; text-align: right; float: right;">%1$s</span>' . __( 'Minimum required version:', 'tgmpa' ) . '</p>',
2592
+ $item['minimum_version']
2593
+ );
2594
+ }
2595
+
2596
+ if ( ! empty( $item['available_version'] ) ) {
2597
+ $color = '';
2598
+ if ( ! empty( $item['minimum_version'] ) && version_compare( $item['available_version'], $item['minimum_version'], '>=' ) ) {
2599
+ $color = ' color: #71C671; font-weight: bold;';
2600
+ }
2601
+
2602
+ $output[] = sprintf(
2603
+ '<p><span style="min-width: 32px; text-align: right; float: right;%1$s">%2$s</span>' . __( 'Available version:', 'tgmpa' ) . '</p>',
2604
+ $color,
2605
+ $item['available_version']
2606
+ );
2607
+ }
2608
+
2609
+ if ( empty( $output ) ) {
2610
+ return '&nbsp;'; // Let's not break the table layout.
2611
+ } else {
2612
+ return implode( "\n", $output );
2613
+ }
2614
+ }
2615
+
2616
+ /**
2617
+ * Sets default message within the plugins table if no plugins
2618
+ * are left for interaction.
2619
+ *
2620
+ * Hides the menu item to prevent the user from clicking and
2621
+ * getting a permissions error.
2622
+ *
2623
+ * @since 2.2.0
2624
+ */
2625
+ public function no_items() {
2626
+ echo esc_html__( 'No plugins to install, update or activate.', 'tgmpa' ) . ' <a href="' . esc_url( self_admin_url() ) . '"> ' . esc_html__( 'Return to the Dashboard', 'tgmpa' ) . '</a>';
2627
+ echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>';
2628
+ }
2629
+
2630
+ /**
2631
+ * Output all the column information within the table.
2632
+ *
2633
+ * @since 2.2.0
2634
+ *
2635
+ * @return array $columns The column names.
2636
+ */
2637
+ public function get_columns() {
2638
+ $columns = array(
2639
+ 'cb' => '<input type="checkbox" />',
2640
+ 'plugin' => __( 'Plugin', 'tgmpa' ),
2641
+ 'source' => __( 'Source', 'tgmpa' ),
2642
+ 'type' => __( 'Type', 'tgmpa' ),
2643
+ );
2644
+
2645
+ if ( 'all' === $this->view_context || 'update' === $this->view_context ) {
2646
+ $columns['version'] = __( 'Version', 'tgmpa' );
2647
+ $columns['status'] = __( 'Status', 'tgmpa' );
2648
+ }
2649
+
2650
+ return apply_filters( 'tgmpa_table_columns', $columns );
2651
+ }
2652
+
2653
+ /**
2654
+ * Get name of default primary column
2655
+ *
2656
+ * @since 2.5.0 / WP 4.3+ compatibility
2657
+ * @access protected
2658
+ *
2659
+ * @return string
2660
+ */
2661
+ protected function get_default_primary_column_name() {
2662
+ return 'plugin';
2663
+ }
2664
+
2665
+ /**
2666
+ * Get the name of the primary column.
2667
+ *
2668
+ * @since 2.5.0 / WP 4.3+ compatibility
2669
+ * @access protected
2670
+ *
2671
+ * @return string The name of the primary column.
2672
+ */
2673
+ protected function get_primary_column_name() {
2674
+ if ( method_exists( 'WP_List_Table', 'get_primary_column_name' ) ) {
2675
+ return parent::get_primary_column_name();
2676
+ } else {
2677
+ return $this->get_default_primary_column_name();
2678
+ }
2679
+ }
2680
+
2681
+ /**
2682
+ * Get the actions which are relevant for a specific plugin row.
2683
+ *
2684
+ * @since 2.5.0
2685
+ *
2686
+ * @param array $item Array of item data.
2687
+ * @return array Array with relevant action links.
2688
+ */
2689
+ protected function get_row_actions( $item ) {
2690
+ $actions = array();
2691
+ $action_links = array();
2692
+
2693
+ // Display the 'Install' action link if the plugin is not yet available.
2694
+ if ( ! $this->tgmpa->is_plugin_installed( $item['slug'] ) ) {
2695
+ /* translators: %s: plugin name in screen reader markup */
2696
+ $actions['install'] = __( 'Install %s', 'tgmpa' );
2697
+ } else {
2698
+ // Display the 'Update' action link if an update is available and WP complies with plugin minimum.
2699
+ if ( false !== $this->tgmpa->does_plugin_have_update( $item['slug'] ) && $this->tgmpa->can_plugin_update( $item['slug'] ) ) {
2700
+ /* translators: %s: plugin name in screen reader markup */
2701
+ $actions['update'] = __( 'Update %s', 'tgmpa' );
2702
+ }
2703
+
2704
+ // Display the 'Activate' action link, but only if the plugin meets the minimum version.
2705
+ if ( $this->tgmpa->can_plugin_activate( $item['slug'] ) ) {
2706
+ /* translators: %s: plugin name in screen reader markup */
2707
+ $actions['activate'] = __( 'Activate %s', 'tgmpa' );
2708
+ }
2709
+ }
2710
+
2711
+ // Create the actual links.
2712
+ foreach ( $actions as $action => $text ) {
2713
+ $nonce_url = wp_nonce_url(
2714
+ add_query_arg(
2715
+ array(
2716
+ 'plugin' => urlencode( $item['slug'] ),
2717
+ 'tgmpa-' . $action => $action . '-plugin',
2718
+ ),
2719
+ $this->tgmpa->get_tgmpa_url()
2720
+ ),
2721
+ 'tgmpa-' . $action,
2722
+ 'tgmpa-nonce'
2723
+ );
2724
+
2725
+ $action_links[ $action ] = sprintf(
2726
+ '<a href="%1$s">' . esc_html( $text ) . '</a>',
2727
+ esc_url( $nonce_url ),
2728
+ '<span class="screen-reader-text">' . esc_html( $item['sanitized_plugin'] ) . '</span>'
2729
+ );
2730
+ }
2731
+
2732
+ $prefix = ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) ? 'network_admin_' : '';
2733
+ return apply_filters( "tgmpa_{$prefix}plugin_action_links", array_filter( $action_links ), $item['slug'], $item, $this->view_context );
2734
+ }
2735
+
2736
+ /**
2737
+ * Generates content for a single row of the table.
2738
+ *
2739
+ * @since 2.5.0
2740
+ *
2741
+ * @param object $item The current item.
2742
+ */
2743
+ public function single_row( $item ) {
2744
+ parent::single_row( $item );
2745
+
2746
+ /**
2747
+ * Fires after each specific row in the TGMPA Plugins list table.
2748
+ *
2749
+ * The dynamic portion of the hook name, `$item['slug']`, refers to the slug
2750
+ * for the plugin.
2751
+ *
2752
+ * @since 2.5.0
2753
+ */
2754
+ do_action( "tgmpa_after_plugin_row_{$item['slug']}", $item['slug'], $item, $this->view_context );
2755
+ }
2756
+
2757
+ /**
2758
+ * Show the upgrade notice below a plugin row if there is one.
2759
+ *
2760
+ * @since 2.5.0
2761
+ *
2762
+ * @see /wp-admin/includes/update.php
2763
+ *
2764
+ * @param string $slug Plugin slug.
2765
+ * @param array $item The information available in this table row.
2766
+ * @return null Return early if upgrade notice is empty.
2767
+ */
2768
+ public function wp_plugin_update_row( $slug, $item ) {
2769
+ if ( empty( $item['upgrade_notice'] ) ) {
2770
+ return;
2771
+ }
2772
+
2773
+ echo '
2774
+ <tr class="plugin-update-tr">
2775
+ <td colspan="', absint( $this->get_column_count() ), '" class="plugin-update colspanchange">
2776
+ <div class="update-message">',
2777
+ esc_html__( 'Upgrade message from the plugin author:', 'tgmpa' ),
2778
+ ' <strong>', wp_kses_data( $item['upgrade_notice'] ), '</strong>
2779
+ </div>
2780
+ </td>
2781
+ </tr>';
2782
+ }
2783
+
2784
+ /**
2785
+ * Extra controls to be displayed between bulk actions and pagination.
2786
+ *
2787
+ * @since 2.5.0
2788
+ *
2789
+ * @param string $which 'top' or 'bottom' table navigation.
2790
+ */
2791
+ public function extra_tablenav( $which ) {
2792
+ if ( 'bottom' === $which ) {
2793
+ $this->tgmpa->show_tgmpa_version();
2794
+ }
2795
+ }
2796
+
2797
+ /**
2798
+ * Defines the bulk actions for handling registered plugins.
2799
+ *
2800
+ * @since 2.2.0
2801
+ *
2802
+ * @return array $actions The bulk actions for the plugin install table.
2803
+ */
2804
+ public function get_bulk_actions() {
2805
+
2806
+ $actions = array();
2807
+
2808
+ if ( 'update' !== $this->view_context && 'activate' !== $this->view_context ) {
2809
+ if ( current_user_can( 'install_plugins' ) ) {
2810
+ $actions['tgmpa-bulk-install'] = __( 'Install', 'tgmpa' );
2811
+ }
2812
+ }
2813
+
2814
+ if ( 'install' !== $this->view_context ) {
2815
+ if ( current_user_can( 'update_plugins' ) ) {
2816
+ $actions['tgmpa-bulk-update'] = __( 'Update', 'tgmpa' );
2817
+ }
2818
+ if ( current_user_can( 'activate_plugins' ) ) {
2819
+ $actions['tgmpa-bulk-activate'] = __( 'Activate', 'tgmpa' );
2820
+ }
2821
+ }
2822
+
2823
+ return $actions;
2824
+ }
2825
+
2826
+ /**
2827
+ * Processes bulk installation and activation actions.
2828
+ *
2829
+ * The bulk installation process looks for the $_POST information and passes that
2830
+ * through if a user has to use WP_Filesystem to enter their credentials.
2831
+ *
2832
+ * @since 2.2.0
2833
+ */
2834
+ public function process_bulk_actions() {
2835
+ // Bulk installation process.
2836
+ if ( 'tgmpa-bulk-install' === $this->current_action() || 'tgmpa-bulk-update' === $this->current_action() ) {
2837
+
2838
+ check_admin_referer( 'bulk-' . $this->_args['plural'] );
2839
+
2840
+ $install_type = 'install';
2841
+ if ( 'tgmpa-bulk-update' === $this->current_action() ) {
2842
+ $install_type = 'update';
2843
+ }
2844
+
2845
+ $plugins_to_install = array();
2846
+
2847
+ // Did user actually select any plugins to install/update ?
2848
+ if ( empty( $_POST['plugin'] ) ) {
2849
+ if ( 'install' === $install_type ) {
2850
+ $message = __( 'No plugins were selected to be installed. No action taken.', 'tgmpa' );
2851
+ } else {
2852
+ $message = __( 'No plugins were selected to be updated. No action taken.', 'tgmpa' );
2853
+ }
2854
+
2855
+ echo '<div id="message" class="error"><p>', esc_html( $message ), '</p></div>';
2856
+
2857
+ return false;
2858
+ }
2859
+
2860
+ if ( is_array( $_POST['plugin'] ) ) {
2861
+ $plugins_to_install = (array) $_POST['plugin'];
2862
+ } elseif ( is_string( $_POST['plugin'] ) ) {
2863
+ // Received via Filesystem page - un-flatten array (WP bug #19643).
2864
+ $plugins_to_install = explode( ',', $_POST['plugin'] );
2865
+ }
2866
+
2867
+ // Sanitize the received input.
2868
+ $plugins_to_install = array_map( 'urldecode', $plugins_to_install );
2869
+ $plugins_to_install = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins_to_install );
2870
+
2871
+ // Validate the received input.
2872
+ foreach ( $plugins_to_install as $key => $slug ) {
2873
+ // Check if the plugin was registered with TGMPA and remove if not.
2874
+ if ( ! isset( $this->tgmpa->plugins[ $slug ] ) ) {
2875
+ unset( $plugins_to_install[ $key ] );
2876
+ continue;
2877
+ }
2878
+
2879
+ // For install: make sure this is a plugin we *can* install and not one already installed.
2880
+ if ( 'install' === $install_type && true === $this->tgmpa->is_plugin_installed( $slug ) ) {
2881
+ unset( $plugins_to_install[ $key ] );
2882
+ }
2883
+
2884
+ // For updates: make sure this is a plugin we *can* update (update available and WP version ok).
2885
+ if ( 'update' === $install_type && false === $this->tgmpa->is_plugin_updatetable( $slug ) ) {
2886
+ unset( $plugins_to_install[ $key ] );
2887
+ }
2888
+ }
2889
+
2890
+ // No need to proceed further if we have no plugins to handle.
2891
+ if ( empty( $plugins_to_install ) ) {
2892
+ if ( 'install' === $install_type ) {
2893
+ $message = __( 'No plugins are available to be installed at this time.', 'tgmpa' );
2894
+ } else {
2895
+ $message = __( 'No plugins are available to be updated at this time.', 'tgmpa' );
2896
+ }
2897
+
2898
+ echo '<div id="message" class="error"><p>', esc_html( $message ), '</p></div>';
2899
+
2900
+ return false;
2901
+ }
2902
+
2903
+ // Pass all necessary information if WP_Filesystem is needed.
2904
+ $url = wp_nonce_url(
2905
+ $this->tgmpa->get_tgmpa_url(),
2906
+ 'bulk-' . $this->_args['plural']
2907
+ );
2908
+
2909
+ // Give validated data back to $_POST which is the only place the filesystem looks for extra fields.
2910
+ $_POST['plugin'] = implode( ',', $plugins_to_install ); // Work around for WP bug #19643.
2911
+
2912
+ $method = ''; // Leave blank so WP_Filesystem can populate it as necessary.
2913
+ $fields = array_keys( $_POST ); // Extra fields to pass to WP_Filesystem.
2914
+
2915
+ if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, $fields ) ) ) {
2916
+ return true; // Stop the normal page form from displaying, credential request form will be shown.
2917
+ }
2918
+
2919
+ // Now we have some credentials, setup WP_Filesystem.
2920
+ if ( ! WP_Filesystem( $creds ) ) {
2921
+ // Our credentials were no good, ask the user for them again.
2922
+ request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, $fields );
2923
+
2924
+ return true;
2925
+ }
2926
+
2927
+ /* If we arrive here, we have the filesystem */
2928
+
2929
+ // Store all information in arrays since we are processing a bulk installation.
2930
+ $names = array();
2931
+ $sources = array(); // Needed for installs.
2932
+ $file_paths = array(); // Needed for upgrades.
2933
+ $to_inject = array(); // Information to inject into the update_plugins transient.
2934
+
2935
+ // Prepare the data for validated plugins for the install/upgrade.
2936
+ foreach ( $plugins_to_install as $slug ) {
2937
+ $name = $this->tgmpa->plugins[ $slug ]['name'];
2938
+ $source = $this->tgmpa->get_download_url( $slug );
2939
+
2940
+ if ( ! empty( $name ) && ! empty( $source ) ) {
2941
+ $names[] = $name;
2942
+
2943
+ switch ( $install_type ) {
2944
+
2945
+ case 'install':
2946
+ $sources[] = $source;
2947
+ break;
2948
+
2949
+ case 'update':
2950
+ $file_paths[] = $this->tgmpa->plugins[ $slug ]['file_path'];
2951
+ $to_inject[ $slug ] = $this->tgmpa->plugins[ $slug ];
2952
+ $to_inject[ $slug ]['source'] = $source;
2953
+ break;
2954
+ }
2955
+ }
2956
+ }
2957
+ unset( $slug, $name, $source );
2958
+
2959
+ // Create a new instance of TGMPA_Bulk_Installer.
2960
+ $installer = new TGMPA_Bulk_Installer(
2961
+ new TGMPA_Bulk_Installer_Skin(
2962
+ array(
2963
+ 'url' => esc_url_raw( $this->tgmpa->get_tgmpa_url() ),
2964
+ 'nonce' => 'bulk-' . $this->_args['plural'],
2965
+ 'names' => $names,
2966
+ 'install_type' => $install_type,
2967
+ )
2968
+ )
2969
+ );
2970
+
2971
+ // Wrap the install process with the appropriate HTML.
2972
+ echo '<div class="tgmpa">',
2973
+ '<h2 style="font-size: 23px; font-weight: 400; line-height: 29px; margin: 0; padding: 9px 15px 4px 0;">', esc_html( get_admin_page_title() ), '</h2>
2974
+ <div class="update-php" style="width: 100%; height: 98%; min-height: 850px; padding-top: 1px;">';
2975
+
2976
+ // Process the bulk installation submissions.
2977
+ add_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1, 3 );
2978
+
2979
+ if ( 'tgmpa-bulk-update' === $this->current_action() ) {
2980
+ // Inject our info into the update transient.
2981
+ $this->tgmpa->inject_update_info( $to_inject );
2982
+
2983
+ $installer->bulk_upgrade( $file_paths );
2984
+ } else {
2985
+ $installer->bulk_install( $sources );
2986
+ }
2987
+
2988
+ remove_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1 );
2989
+
2990
+ echo '</div></div>';
2991
+
2992
+ return true;
2993
+ }
2994
+
2995
+ // Bulk activation process.
2996
+ if ( 'tgmpa-bulk-activate' === $this->current_action() ) {
2997
+ check_admin_referer( 'bulk-' . $this->_args['plural'] );
2998
+
2999
+ // Did user actually select any plugins to activate ?
3000
+ if ( empty( $_POST['plugin'] ) ) {
3001
+ echo '<div id="message" class="error"><p>', esc_html__( 'No plugins were selected to be activated. No action taken.', 'tgmpa' ), '</p></div>';
3002
+
3003
+ return false;
3004
+ }
3005
+
3006
+ // Grab plugin data from $_POST.
3007
+ $plugins = array();
3008
+ if ( isset( $_POST['plugin'] ) ) {
3009
+ $plugins = array_map( 'urldecode', (array) $_POST['plugin'] );
3010
+ $plugins = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins );
3011
+ }
3012
+
3013
+ $plugins_to_activate = array();
3014
+ $plugin_names = array();
3015
+
3016
+ // Grab the file paths for the selected & inactive plugins from the registration array.
3017
+ foreach ( $plugins as $slug ) {
3018
+ if ( $this->tgmpa->can_plugin_activate( $slug ) ) {
3019
+ $plugins_to_activate[] = $this->tgmpa->plugins[ $slug ]['file_path'];
3020
+ $plugin_names[] = $this->tgmpa->plugins[ $slug ]['name'];
3021
+ }
3022
+ }
3023
+ unset( $slug );
3024
+
3025
+ // Return early if there are no plugins to activate.
3026
+ if ( empty( $plugins_to_activate ) ) {
3027
+ echo '<div id="message" class="error"><p>', esc_html__( 'No plugins are available to be activated at this time.', 'tgmpa' ), '</p></div>';
3028
+
3029
+ return false;
3030
+ }
3031
+
3032
+ // Now we are good to go - let's start activating plugins.
3033
+ $activate = activate_plugins( $plugins_to_activate );
3034
+
3035
+ if ( is_wp_error( $activate ) ) {
3036
+ echo '<div id="message" class="error"><p>', wp_kses_post( $activate->get_error_message() ), '</p></div>';
3037
+ } else {
3038
+ $count = count( $plugin_names ); // Count so we can use _n function.
3039
+ $plugin_names = array_map( array( 'TGMPA_Utils', 'wrap_in_strong' ), $plugin_names );
3040
+ $last_plugin = array_pop( $plugin_names ); // Pop off last name to prep for readability.
3041
+ $imploded = empty( $plugin_names ) ? $last_plugin : ( implode( ', ', $plugin_names ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'tgmpa' ) . ' ' . $last_plugin );
3042
+
3043
+ printf( // WPCS: xss ok.
3044
+ '<div id="message" class="updated"><p>%1$s %2$s.</p></div>',
3045
+ esc_html( _n( 'The following plugin was activated successfully:', 'The following plugins were activated successfully:', $count, 'tgmpa' ) ),
3046
+ $imploded
3047
+ );
3048
+
3049
+ // Update recently activated plugins option.
3050
+ $recent = (array) get_option( 'recently_activated' );
3051
+ foreach ( $plugins_to_activate as $plugin => $time ) {
3052
+ if ( isset( $recent[ $plugin ] ) ) {
3053
+ unset( $recent[ $plugin ] );
3054
+ }
3055
+ }
3056
+ update_option( 'recently_activated', $recent );
3057
+ }
3058
+
3059
+ unset( $_POST ); // Reset the $_POST variable in case user wants to perform one action after another.
3060
+
3061
+ return true;
3062
+ }
3063
+
3064
+ return false;
3065
+ }
3066
+
3067
+ /**
3068
+ * Prepares all of our information to be outputted into a usable table.
3069
+ *
3070
+ * @since 2.2.0
3071
+ */
3072
+ public function prepare_items() {
3073
+ $columns = $this->get_columns(); // Get all necessary column information.
3074
+ $hidden = array(); // No columns to hide, but we must set as an array.
3075
+ $sortable = array(); // No reason to make sortable columns.
3076
+ $primary = $this->get_primary_column_name(); // Column which has the row actions.
3077
+ $this->_column_headers = array( $columns, $hidden, $sortable, $primary ); // Get all necessary column headers.
3078
+
3079
+ // Process our bulk activations here.
3080
+ if ( 'tgmpa-bulk-activate' === $this->current_action() ) {
3081
+ $this->process_bulk_actions();
3082
+ }
3083
+
3084
+ // Store all of our plugin data into $items array so WP_List_Table can use it.
3085
+ $this->items = apply_filters( 'tgmpa_table_data_items', $this->_gather_plugin_data() );
3086
+ }
3087
+
3088
+ /* *********** DEPRECATED METHODS *********** */
3089
+
3090
+ /**
3091
+ * Retrieve plugin data, given the plugin name.
3092
+ *
3093
+ * @since 2.2.0
3094
+ * @deprecated 2.5.0 use {@see TGM_Plugin_Activation::_get_plugin_data_from_name()} instead.
3095
+ * @see TGM_Plugin_Activation::_get_plugin_data_from_name()
3096
+ *
3097
+ * @param string $name Name of the plugin, as it was registered.
3098
+ * @param string $data Optional. Array key of plugin data to return. Default is slug.
3099
+ * @return string|boolean Plugin slug if found, false otherwise.
3100
+ */
3101
+ protected function _get_plugin_data_from_name( $name, $data = 'slug' ) {
3102
+ _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'TGM_Plugin_Activation::_get_plugin_data_from_name()' );
3103
+
3104
+ return $this->tgmpa->_get_plugin_data_from_name( $name, $data );
3105
+ }
3106
+ }
3107
+ }
3108
+
3109
+
3110
+ if ( ! class_exists( 'TGM_Bulk_Installer' ) ) {
3111
+
3112
+ /**
3113
+ * Hack: Prevent TGMPA v2.4.1- bulk installer class from being loaded if 2.4.1- is loaded after 2.5+.
3114
+ *
3115
+ * @since 2.5.2
3116
+ *
3117
+ * {@internal The TGMPA_Bulk_Installer class was originally called TGM_Bulk_Installer.
3118
+ * For more information, see that class.}}
3119
+ */
3120
+ class TGM_Bulk_Installer {
3121
+ }
3122
+ }
3123
+ if ( ! class_exists( 'TGM_Bulk_Installer_Skin' ) ) {
3124
+
3125
+ /**
3126
+ * Hack: Prevent TGMPA v2.4.1- bulk installer skin class from being loaded if 2.4.1- is loaded after 2.5+.
3127
+ *
3128
+ * @since 2.5.2
3129
+ *
3130
+ * {@internal The TGMPA_Bulk_Installer_Skin class was originally called TGM_Bulk_Installer_Skin.
3131
+ * For more information, see that class.}}
3132
+ */
3133
+ class TGM_Bulk_Installer_Skin {
3134
+ }
3135
+ }
3136
+
3137
+ /**
3138
+ * The WP_Upgrader file isn't always available. If it isn't available,
3139
+ * we load it here.
3140
+ *
3141
+ * We check to make sure no action or activation keys are set so that WordPress
3142
+ * does not try to re-include the class when processing upgrades or installs outside
3143
+ * of the class.
3144
+ *
3145
+ * @since 2.2.0
3146
+ */
3147
+ add_action( 'admin_init', 'tgmpa_load_bulk_installer' );
3148
+ if ( ! function_exists( 'tgmpa_load_bulk_installer' ) ) {
3149
+ /**
3150
+ * Load bulk installer
3151
+ */
3152
+ function tgmpa_load_bulk_installer() {
3153
+ // Silently fail if 2.5+ is loaded *after* an older version.
3154
+ if ( ! isset( $GLOBALS['tgmpa'] ) ) {
3155
+ return;
3156
+ }
3157
+
3158
+ // Get TGMPA class instance.
3159
+ $tgmpa_instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
3160
+
3161
+ if ( isset( $_GET['page'] ) && $tgmpa_instance->menu === $_GET['page'] ) {
3162
+ if ( ! class_exists( 'Plugin_Upgrader', false ) ) {
3163
+ require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
3164
+ }
3165
+
3166
+ if ( ! class_exists( 'TGMPA_Bulk_Installer' ) ) {
3167
+
3168
+ /**
3169
+ * Installer class to handle bulk plugin installations.
3170
+ *
3171
+ * Extends WP_Upgrader and customizes to suit the installation of multiple
3172
+ * plugins.
3173
+ *
3174
+ * @since 2.2.0
3175
+ *
3176
+ * {@internal Since 2.5.0 the class is an extension of Plugin_Upgrader rather than WP_Upgrader.}}
3177
+ * {@internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer to TGMPA_Bulk_Installer.
3178
+ * This was done to prevent backward compatibility issues with v2.3.6.}}
3179
+ *
3180
+ * @package TGM-Plugin-Activation
3181
+ * @author Thomas Griffin
3182
+ * @author Gary Jones
3183
+ */
3184
+ class TGMPA_Bulk_Installer extends Plugin_Upgrader {
3185
+ /**
3186
+ * Holds result of bulk plugin installation.
3187
+ *
3188
+ * @since 2.2.0
3189
+ *
3190
+ * @var string
3191
+ */
3192
+ public $result;
3193
+
3194
+ /**
3195
+ * Flag to check if bulk installation is occurring or not.
3196
+ *
3197
+ * @since 2.2.0
3198
+ *
3199
+ * @var boolean
3200
+ */
3201
+ public $bulk = false;
3202
+
3203
+ /**
3204
+ * TGMPA instance
3205
+ *
3206
+ * @since 2.5.0
3207
+ *
3208
+ * @var object
3209
+ */
3210
+ protected $tgmpa;
3211
+
3212
+ /**
3213
+ * Whether or not the destination directory needs to be cleared ( = on update).
3214
+ *
3215
+ * @since 2.5.0
3216
+ *
3217
+ * @var bool
3218
+ */
3219
+ protected $clear_destination = false;
3220
+
3221
+ /**
3222
+ * References parent constructor and sets defaults for class.
3223
+ *
3224
+ * @since 2.2.0
3225
+ *
3226
+ * @param \Bulk_Upgrader_Skin|null $skin Installer skin.
3227
+ */
3228
+ public function __construct( $skin = null ) {
3229
+ // Get TGMPA class instance.
3230
+ $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
3231
+
3232
+ parent::__construct( $skin );
3233
+
3234
+ if ( isset( $this->skin->options['install_type'] ) && 'update' === $this->skin->options['install_type'] ) {
3235
+ $this->clear_destination = true;
3236
+ }
3237
+
3238
+ if ( $this->tgmpa->is_automatic ) {
3239
+ $this->activate_strings();
3240
+ }
3241
+
3242
+ add_action( 'upgrader_process_complete', array( $this->tgmpa, 'populate_file_path' ) );
3243
+ }
3244
+
3245
+ /**
3246
+ * Sets the correct activation strings for the installer skin to use.
3247
+ *
3248
+ * @since 2.2.0
3249
+ */
3250
+ public function activate_strings() {
3251
+ $this->strings['activation_failed'] = __( 'Plugin activation failed.', 'tgmpa' );
3252
+ $this->strings['activation_success'] = __( 'Plugin activated successfully.', 'tgmpa' );
3253
+ }
3254
+
3255
+ /**
3256
+ * Performs the actual installation of each plugin.
3257
+ *
3258
+ * @since 2.2.0
3259
+ *
3260
+ * @see WP_Upgrader::run()
3261
+ *
3262
+ * @param array $options The installation config options.
3263
+ * @return null|array Return early if error, array of installation data on success.
3264
+ */
3265
+ public function run( $options ) {
3266
+ $result = parent::run( $options );
3267
+
3268
+ // Reset the strings in case we changed one during automatic activation.
3269
+ if ( $this->tgmpa->is_automatic ) {
3270
+ if ( 'update' === $this->skin->options['install_type'] ) {
3271
+ $this->upgrade_strings();
3272
+ } else {
3273
+ $this->install_strings();
3274
+ }
3275
+ }
3276
+
3277
+ return $result;
3278
+ }
3279
+
3280
+ /**
3281
+ * Processes the bulk installation of plugins.
3282
+ *
3283
+ * @since 2.2.0
3284
+ *
3285
+ * {@internal This is basically a near identical copy of the WP Core
3286
+ * Plugin_Upgrader::bulk_upgrade() method, with minor adjustments to deal with
3287
+ * new installs instead of upgrades.
3288
+ * For ease of future synchronizations, the adjustments are clearly commented, but no other
3289
+ * comments are added. Code style has been made to comply.}}
3290
+ *
3291
+ * @see Plugin_Upgrader::bulk_upgrade()
3292
+ * @see https://core.trac.wordpress.org/browser/tags/4.2.1/src/wp-admin/includes/class-wp-upgrader.php#L838
3293
+ * (@internal Last synced: Dec 31st 2015 against https://core.trac.wordpress.org/browser/trunk?rev=36134}}
3294
+ *
3295
+ * @param array $plugins The plugin sources needed for installation.
3296
+ * @param array $args Arbitrary passed extra arguments.
3297
+ * @return array|false Install confirmation messages on success, false on failure.
3298
+ */
3299
+ public function bulk_install( $plugins, $args = array() ) {
3300
+ // [TGMPA + ] Hook auto-activation in.
3301
+ add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
3302
+
3303
+ $defaults = array(
3304
+ 'clear_update_cache' => true,
3305
+ );
3306
+ $parsed_args = wp_parse_args( $args, $defaults );
3307
+
3308
+ $this->init();
3309
+ $this->bulk = true;
3310
+
3311
+ $this->install_strings(); // [TGMPA + ] adjusted.
3312
+
3313
+ /* [TGMPA - ] $current = get_site_transient( 'update_plugins' ); */
3314
+
3315
+ /* [TGMPA - ] add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4); */
3316
+
3317
+ $this->skin->header();
3318
+
3319
+ // Connect to the Filesystem first.
3320
+ $res = $this->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) );
3321
+ if ( ! $res ) {
3322
+ $this->skin->footer();
3323
+ return false;
3324
+ }
3325
+
3326
+ $this->skin->bulk_header();
3327
+
3328
+ /*
3329
+ * Only start maintenance mode if:
3330
+ * - running Multisite and there are one or more plugins specified, OR
3331
+ * - a plugin with an update available is currently active.
3332
+ * @TODO: For multisite, maintenance mode should only kick in for individual sites if at all possible.
3333
+ */
3334
+ $maintenance = ( is_multisite() && ! empty( $plugins ) );
3335
+
3336
+ /*
3337
+ [TGMPA - ]
3338
+ foreach ( $plugins as $plugin )
3339
+ $maintenance = $maintenance || ( is_plugin_active( $plugin ) && isset( $current->response[ $plugin] ) );
3340
+ */
3341
+ if ( $maintenance ) {
3342
+ $this->maintenance_mode( true );
3343
+ }
3344
+
3345
+ $results = array();
3346
+
3347
+ $this->update_count = count( $plugins );
3348
+ $this->update_current = 0;
3349
+ foreach ( $plugins as $plugin ) {
3350
+ $this->update_current++;
3351
+
3352
+ /*
3353
+ [TGMPA - ]
3354
+ $this->skin->plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin, false, true);
3355
+
3356
+ if ( !isset( $current->response[ $plugin ] ) ) {
3357
+ $this->skin->set_result('up_to_date');
3358
+ $this->skin->before();
3359
+ $this->skin->feedback('up_to_date');
3360
+ $this->skin->after();
3361
+ $results[$plugin] = true;
3362
+ continue;
3363
+ }
3364
+
3365
+ // Get the URL to the zip file.
3366
+ $r = $current->response[ $plugin ];
3367
+
3368
+ $this->skin->plugin_active = is_plugin_active($plugin);
3369
+ */
3370
+
3371
+ $result = $this->run(
3372
+ array(
3373
+ 'package' => $plugin, // [TGMPA + ] adjusted.
3374
+ 'destination' => WP_PLUGIN_DIR,
3375
+ 'clear_destination' => false, // [TGMPA + ] adjusted.
3376
+ 'clear_working' => true,
3377
+ 'is_multi' => true,
3378
+ 'hook_extra' => array(
3379
+ 'plugin' => $plugin,
3380
+ ),
3381
+ )
3382
+ );
3383
+
3384
+ $results[ $plugin ] = $this->result;
3385
+
3386
+ // Prevent credentials auth screen from displaying multiple times.
3387
+ if ( false === $result ) {
3388
+ break;
3389
+ }
3390
+ } //end foreach $plugins
3391
+
3392
+ $this->maintenance_mode( false );
3393
+
3394
+ /**
3395
+ * Fires when the bulk upgrader process is complete.
3396
+ *
3397
+ * @since WP 3.6.0 / TGMPA 2.5.0
3398
+ *
3399
+ * @param Plugin_Upgrader $this Plugin_Upgrader instance. In other contexts, $this, might
3400
+ * be a Theme_Upgrader or Core_Upgrade instance.
3401
+ * @param array $data {
3402
+ * Array of bulk item update data.
3403
+ *
3404
+ * @type string $action Type of action. Default 'update'.
3405
+ * @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'.
3406
+ * @type bool $bulk Whether the update process is a bulk update. Default true.
3407
+ * @type array $packages Array of plugin, theme, or core packages to update.
3408
+ * }
3409
+ */
3410
+ do_action( 'upgrader_process_complete', $this, array(
3411
+ 'action' => 'install', // [TGMPA + ] adjusted.
3412
+ 'type' => 'plugin',
3413
+ 'bulk' => true,
3414
+ 'plugins' => $plugins,
3415
+ ) );
3416
+
3417
+ $this->skin->bulk_footer();
3418
+
3419
+ $this->skin->footer();
3420
+
3421
+ // Cleanup our hooks, in case something else does a upgrade on this connection.
3422
+ /* [TGMPA - ] remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin')); */
3423
+
3424
+ // [TGMPA + ] Remove our auto-activation hook.
3425
+ remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
3426
+
3427
+ // Force refresh of plugin update information.
3428
+ wp_clean_plugins_cache( $parsed_args['clear_update_cache'] );
3429
+
3430
+ return $results;
3431
+ }
3432
+
3433
+ /**
3434
+ * Handle a bulk upgrade request.
3435
+ *
3436
+ * @since 2.5.0
3437
+ *
3438
+ * @see Plugin_Upgrader::bulk_upgrade()
3439
+ *
3440
+ * @param array $plugins The local WP file_path's of the plugins which should be upgraded.
3441
+ * @param array $args Arbitrary passed extra arguments.
3442
+ * @return string|bool Install confirmation messages on success, false on failure.
3443
+ */
3444
+ public function bulk_upgrade( $plugins, $args = array() ) {
3445
+
3446
+ add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
3447
+
3448
+ $result = parent::bulk_upgrade( $plugins, $args );
3449
+
3450
+ remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
3451
+
3452
+ return $result;
3453
+ }
3454
+
3455
+ /**
3456
+ * Abuse a filter to auto-activate plugins after installation.
3457
+ *
3458
+ * Hooked into the 'upgrader_post_install' filter hook.
3459
+ *
3460
+ * @since 2.5.0
3461
+ *
3462
+ * @param bool $bool The value we need to give back (true).
3463
+ * @return bool
3464
+ */
3465
+ public function auto_activate( $bool ) {
3466
+ // Only process the activation of installed plugins if the automatic flag is set to true.
3467
+ if ( $this->tgmpa->is_automatic ) {
3468
+ // Flush plugins cache so the headers of the newly installed plugins will be read correctly.
3469
+ wp_clean_plugins_cache();
3470
+
3471
+ // Get the installed plugin file.
3472
+ $plugin_info = $this->plugin_info();
3473
+
3474
+ // Don't try to activate on upgrade of active plugin as WP will do this already.
3475
+ if ( ! is_plugin_active( $plugin_info ) ) {
3476
+ $activate = activate_plugin( $plugin_info );
3477
+
3478
+ // Adjust the success string based on the activation result.
3479
+ $this->strings['process_success'] = $this->strings['process_success'] . "<br />\n";
3480
+
3481
+ if ( is_wp_error( $activate ) ) {
3482
+ $this->skin->error( $activate );
3483
+ $this->strings['process_success'] .= $this->strings['activation_failed'];
3484
+ } else {
3485
+ $this->strings['process_success'] .= $this->strings['activation_success'];
3486
+ }
3487
+ }
3488
+ }
3489
+
3490
+ return $bool;
3491
+ }
3492
+ }
3493
+ }
3494
+
3495
+ if ( ! class_exists( 'TGMPA_Bulk_Installer_Skin' ) ) {
3496
+
3497
+ /**
3498
+ * Installer skin to set strings for the bulk plugin installations..
3499
+ *
3500
+ * Extends Bulk_Upgrader_Skin and customizes to suit the installation of multiple
3501
+ * plugins.
3502
+ *
3503
+ * @since 2.2.0
3504
+ *
3505
+ * {@internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer_Skin to
3506
+ * TGMPA_Bulk_Installer_Skin.
3507
+ * This was done to prevent backward compatibility issues with v2.3.6.}}
3508
+ *
3509
+ * @see https://core.trac.wordpress.org/browser/trunk/src/wp-admin/includes/class-wp-upgrader-skins.php
3510
+ *
3511
+ * @package TGM-Plugin-Activation
3512
+ * @author Thomas Griffin
3513
+ * @author Gary Jones
3514
+ */
3515
+ class TGMPA_Bulk_Installer_Skin extends Bulk_Upgrader_Skin {
3516
+ /**
3517
+ * Holds plugin info for each individual plugin installation.
3518
+ *
3519
+ * @since 2.2.0
3520
+ *
3521
+ * @var array
3522
+ */
3523
+ public $plugin_info = array();
3524
+
3525
+ /**
3526
+ * Holds names of plugins that are undergoing bulk installations.
3527
+ *
3528
+ * @since 2.2.0
3529
+ *
3530
+ * @var array
3531
+ */
3532
+ public $plugin_names = array();
3533
+
3534
+ /**
3535
+ * Integer to use for iteration through each plugin installation.
3536
+ *
3537
+ * @since 2.2.0
3538
+ *
3539
+ * @var integer
3540
+ */
3541
+ public $i = 0;
3542
+
3543
+ /**
3544
+ * TGMPA instance
3545
+ *
3546
+ * @since 2.5.0
3547
+ *
3548
+ * @var object
3549
+ */
3550
+ protected $tgmpa;
3551
+
3552
+ /**
3553
+ * Constructor. Parses default args with new ones and extracts them for use.
3554
+ *
3555
+ * @since 2.2.0
3556
+ *
3557
+ * @param array $args Arguments to pass for use within the class.
3558
+ */
3559
+ public function __construct( $args = array() ) {
3560
+ // Get TGMPA class instance.
3561
+ $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
3562
+
3563
+ // Parse default and new args.
3564
+ $defaults = array(
3565
+ 'url' => '',
3566
+ 'nonce' => '',
3567
+ 'names' => array(),
3568
+ 'install_type' => 'install',
3569
+ );
3570
+ $args = wp_parse_args( $args, $defaults );
3571
+
3572
+ // Set plugin names to $this->plugin_names property.
3573
+ $this->plugin_names = $args['names'];
3574
+
3575
+ // Extract the new args.
3576
+ parent::__construct( $args );
3577
+ }
3578
+
3579
+ /**
3580
+ * Sets install skin strings for each individual plugin.
3581
+ *
3582
+ * Checks to see if the automatic activation flag is set and uses the
3583
+ * the proper strings accordingly.
3584
+ *
3585
+ * @since 2.2.0
3586
+ */
3587
+ public function add_strings() {
3588
+ if ( 'update' === $this->options['install_type'] ) {
3589
+ parent::add_strings();
3590
+ /* translators: 1: plugin name, 2: action number 3: total number of actions. */
3591
+ $this->upgrader->strings['skin_before_update_header'] = __( 'Updating Plugin %1$s (%2$d/%3$d)', 'tgmpa' );
3592
+ } else {
3593
+ /* translators: 1: plugin name, 2: error message. */
3594
+ $this->upgrader->strings['skin_update_failed_error'] = __( 'An error occurred while installing %1$s: <strong>%2$s</strong>.', 'tgmpa' );
3595
+ /* translators: 1: plugin name. */
3596
+ $this->upgrader->strings['skin_update_failed'] = __( 'The installation of %1$s failed.', 'tgmpa' );
3597
+
3598
+ if ( $this->tgmpa->is_automatic ) {
3599
+ // Automatic activation strings.
3600
+ $this->upgrader->strings['skin_upgrade_start'] = __( 'The installation and activation process is starting. This process may take a while on some hosts, so please be patient.', 'tgmpa' );
3601
+ /* translators: 1: plugin name. */
3602
+ $this->upgrader->strings['skin_update_successful'] = __( '%1$s installed and activated successfully.', 'tgmpa' ) . ' <a href="#" class="hide-if-no-js" onclick="%2$s"><span>' . esc_html__( 'Show Details', 'tgmpa' ) . '</span><span class="hidden">' . esc_html__( 'Hide Details', 'tgmpa' ) . '</span>.</a>';
3603
+ $this->upgrader->strings['skin_upgrade_end'] = __( 'All installations and activations have been completed.', 'tgmpa' );
3604
+ /* translators: 1: plugin name, 2: action number 3: total number of actions. */
3605
+ $this->upgrader->strings['skin_before_update_header'] = __( 'Installing and Activating Plugin %1$s (%2$d/%3$d)', 'tgmpa' );
3606
+ } else {
3607
+ // Default installation strings.
3608
+ $this->upgrader->strings['skin_upgrade_start'] = __( 'The installation process is starting. This process may take a while on some hosts, so please be patient.', 'tgmpa' );
3609
+ /* translators: 1: plugin name. */
3610
+ $this->upgrader->strings['skin_update_successful'] = esc_html__( '%1$s installed successfully.', 'tgmpa' ) . ' <a href="#" class="hide-if-no-js" onclick="%2$s"><span>' . esc_html__( 'Show Details', 'tgmpa' ) . '</span><span class="hidden">' . esc_html__( 'Hide Details', 'tgmpa' ) . '</span>.</a>';
3611
+ $this->upgrader->strings['skin_upgrade_end'] = __( 'All installations have been completed.', 'tgmpa' );
3612
+ /* translators: 1: plugin name, 2: action number 3: total number of actions. */
3613
+ $this->upgrader->strings['skin_before_update_header'] = __( 'Installing Plugin %1$s (%2$d/%3$d)', 'tgmpa' );
3614
+ }
3615
+ }
3616
+ }
3617
+
3618
+ /**
3619
+ * Outputs the header strings and necessary JS before each plugin installation.
3620
+ *
3621
+ * @since 2.2.0
3622
+ *
3623
+ * @param string $title Unused in this implementation.
3624
+ */
3625
+ public function before( $title = '' ) {
3626
+ if ( empty( $title ) ) {
3627
+ $title = esc_html( $this->plugin_names[ $this->i ] );
3628
+ }
3629
+ parent::before( $title );
3630
+ }
3631
+
3632
+ /**
3633
+ * Outputs the footer strings and necessary JS after each plugin installation.
3634
+ *
3635
+ * Checks for any errors and outputs them if they exist, else output
3636
+ * success strings.
3637
+ *
3638
+ * @since 2.2.0
3639
+ *
3640
+ * @param string $title Unused in this implementation.
3641
+ */
3642
+ public function after( $title = '' ) {
3643
+ if ( empty( $title ) ) {
3644
+ $title = esc_html( $this->plugin_names[ $this->i ] );
3645
+ }
3646
+ parent::after( $title );
3647
+
3648
+ $this->i++;
3649
+ }
3650
+
3651
+ /**
3652
+ * Outputs links after bulk plugin installation is complete.
3653
+ *
3654
+ * @since 2.2.0
3655
+ */
3656
+ public function bulk_footer() {
3657
+ // Serve up the string to say installations (and possibly activations) are complete.
3658
+ parent::bulk_footer();
3659
+
3660
+ // Flush plugins cache so we can make sure that the installed plugins list is always up to date.
3661
+ wp_clean_plugins_cache();
3662
+
3663
+ $this->tgmpa->show_tgmpa_version();
3664
+
3665
+ // Display message based on if all plugins are now active or not.
3666
+ $update_actions = array();
3667
+
3668
+ if ( $this->tgmpa->is_tgmpa_complete() ) {
3669
+ // All plugins are active, so we display the complete string and hide the menu to protect users.
3670
+ echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>';
3671
+ $update_actions['dashboard'] = sprintf(
3672
+ esc_html( $this->tgmpa->strings['complete'] ),
3673
+ '<a href="' . esc_url( self_admin_url() ) . '">' . esc_html__( 'Return to the Dashboard', 'tgmpa' ) . '</a>'
3674
+ );
3675
+ } else {
3676
+ $update_actions['tgmpa_page'] = '<a href="' . esc_url( $this->tgmpa->get_tgmpa_url() ) . '" target="_parent">' . esc_html( $this->tgmpa->strings['return'] ) . '</a>';
3677
+ }
3678
+
3679
+ /**
3680
+ * Filter the list of action links available following bulk plugin installs/updates.
3681
+ *
3682
+ * @since 2.5.0
3683
+ *
3684
+ * @param array $update_actions Array of plugin action links.
3685
+ * @param array $plugin_info Array of information for the last-handled plugin.
3686
+ */
3687
+ $update_actions = apply_filters( 'tgmpa_update_bulk_plugins_complete_actions', $update_actions, $this->plugin_info );
3688
+
3689
+ if ( ! empty( $update_actions ) ) {
3690
+ $this->feedback( implode( ' | ', (array) $update_actions ) );
3691
+ }
3692
+ }
3693
+
3694
+ /* *********** DEPRECATED METHODS *********** */
3695
+
3696
+ /**
3697
+ * Flush header output buffer.
3698
+ *
3699
+ * @since 2.2.0
3700
+ * @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead
3701
+ * @see Bulk_Upgrader_Skin::flush_output()
3702
+ */
3703
+ public function before_flush_output() {
3704
+ _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' );
3705
+ $this->flush_output();
3706
+ }
3707
+
3708
+ /**
3709
+ * Flush footer output buffer and iterate $this->i to make sure the
3710
+ * installation strings reference the correct plugin.
3711
+ *
3712
+ * @since 2.2.0
3713
+ * @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead
3714
+ * @see Bulk_Upgrader_Skin::flush_output()
3715
+ */
3716
+ public function after_flush_output() {
3717
+ _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' );
3718
+ $this->flush_output();
3719
+ $this->i++;
3720
+ }
3721
+ }
3722
+ }
3723
+ }
3724
+ }
3725
+ }
3726
+
3727
+ if ( ! class_exists( 'TGMPA_Utils' ) ) {
3728
+
3729
+ /**
3730
+ * Generic utilities for TGMPA.
3731
+ *
3732
+ * All methods are static, poor-dev name-spacing class wrapper.
3733
+ *
3734
+ * Class was called TGM_Utils in 2.5.0 but renamed TGMPA_Utils in 2.5.1 as this was conflicting with Soliloquy.
3735
+ *
3736
+ * @since 2.5.0
3737
+ *
3738
+ * @package TGM-Plugin-Activation
3739
+ * @author Juliette Reinders Folmer
3740
+ */
3741
+ class TGMPA_Utils {
3742
+ /**
3743
+ * Whether the PHP filter extension is enabled.
3744
+ *
3745
+ * @see http://php.net/book.filter
3746
+ *
3747
+ * @since 2.5.0
3748
+ *
3749
+ * @static
3750
+ *
3751
+ * @var bool $has_filters True is the extension is enabled.
3752
+ */
3753
+ public static $has_filters;
3754
+
3755
+ /**
3756
+ * Wrap an arbitrary string in <em> tags. Meant to be used in combination with array_map().
3757
+ *
3758
+ * @since 2.5.0
3759
+ *
3760
+ * @static
3761
+ *
3762
+ * @param string $string Text to be wrapped.
3763
+ * @return string
3764
+ */
3765
+ public static function wrap_in_em( $string ) {
3766
+ return '<em>' . wp_kses_post( $string ) . '</em>';
3767
+ }
3768
+
3769
+ /**
3770
+ * Wrap an arbitrary string in <strong> tags. Meant to be used in combination with array_map().
3771
+ *
3772
+ * @since 2.5.0
3773
+ *
3774
+ * @static
3775
+ *
3776
+ * @param string $string Text to be wrapped.
3777
+ * @return string
3778
+ */
3779
+ public static function wrap_in_strong( $string ) {
3780
+ return '<strong>' . wp_kses_post( $string ) . '</strong>';
3781
+ }
3782
+
3783
+ /**
3784
+ * Helper function: Validate a value as boolean
3785
+ *
3786
+ * @since 2.5.0
3787
+ *
3788
+ * @static
3789
+ *
3790
+ * @param mixed $value Arbitrary value.
3791
+ * @return bool
3792
+ */
3793
+ public static function validate_bool( $value ) {
3794
+ if ( ! isset( self::$has_filters ) ) {
3795
+ self::$has_filters = extension_loaded( 'filter' );
3796
+ }
3797
+
3798
+ if ( self::$has_filters ) {
3799
+ return filter_var( $value, FILTER_VALIDATE_BOOLEAN );
3800
+ } else {
3801
+ return self::emulate_filter_bool( $value );
3802
+ }
3803
+ }
3804
+
3805
+ /**
3806
+ * Helper function: Cast a value to bool
3807
+ *
3808
+ * @since 2.5.0
3809
+ *
3810
+ * @static
3811
+ *
3812
+ * @param mixed $value Value to cast.
3813
+ * @return bool
3814
+ */
3815
+ protected static function emulate_filter_bool( $value ) {
3816
+ // @codingStandardsIgnoreStart
3817
+ static $true = array(
3818
+ '1',
3819
+ 'true', 'True', 'TRUE',
3820
+ 'y', 'Y',
3821
+ 'yes', 'Yes', 'YES',
3822
+ 'on', 'On', 'ON',
3823
+ );
3824
+ static $false = array(
3825
+ '0',
3826
+ 'false', 'False', 'FALSE',
3827
+ 'n', 'N',
3828
+ 'no', 'No', 'NO',
3829
+ 'off', 'Off', 'OFF',
3830
+ );
3831
+ // @codingStandardsIgnoreEnd
3832
+
3833
+ if ( is_bool( $value ) ) {
3834
+ return $value;
3835
+ } elseif ( is_int( $value ) && ( 0 === $value || 1 === $value ) ) {
3836
+ return (bool) $value;
3837
+ } elseif ( ( is_float( $value ) && ! is_nan( $value ) ) && ( (float) 0 === $value || (float) 1 === $value ) ) {
3838
+ return (bool) $value;
3839
+ } elseif ( is_string( $value ) ) {
3840
+ $value = trim( $value );
3841
+ if ( in_array( $value, $true, true ) ) {
3842
+ return true;
3843
+ } elseif ( in_array( $value, $false, true ) ) {
3844
+ return false;
3845
+ } else {
3846
+ return false;
3847
+ }
3848
+ }
3849
+
3850
+ return false;
3851
+ }
3852
+ } // End of class TGMPA_Utils
3853
+ } // End of class_exists wrapper
admin/activation/elementor-activation.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file represents an example of the code that themes would use to register
4
+ * the required plugins.
5
+ *
6
+ * It is expected that theme authors would copy and paste this code into their
7
+ * functions.php file, and amend to suit.
8
+ *
9
+ * @see http://tgmpluginactivation.com/configuration/ for detailed documentation.
10
+ *
11
+ * @package TGM-Plugin-Activation
12
+ * @subpackage Example
13
+ * @version 2.6.0
14
+ * @author Thomas Griffin, Gary Jones, Juliette Reinders Folmer
15
+ * @copyright Copyright (c) 2011, Thomas Griffin
16
+ * @license http://opensource.org/licenses/gpl-2.0.php GPL v2 or later
17
+ * @link https://github.com/TGMPA/TGM-Plugin-Activation
18
+ */
19
+
20
+ /**
21
+ * Include the TGM_Plugin_Activation class.
22
+ *
23
+ * Depending on your implementation, you may want to change the include call:
24
+ *
25
+ * Parent Theme:
26
+ * require_once get_template_directory() . '/path/to/class-tgm-plugin-activation.php';
27
+ *
28
+ * Child Theme:
29
+ * require_once get_stylesheet_directory() . '/path/to/class-tgm-plugin-activation.php';
30
+ *
31
+ * Plugin:
32
+ * require_once dirname( __FILE__ ) . '/path/to/class-tgm-plugin-activation.php';
33
+ */
34
+ require_once dirname( __FILE__ ) . '/class-tgm-plugin-activation.php';
35
+
36
+ add_action( 'tgmpa_register', 'premium_addons_required_plugins' );
37
+
38
+ /**
39
+ * Register the required plugins for this theme.
40
+ *
41
+ * In this example, we register five plugins:
42
+ * - one included with the TGMPA library
43
+ * - two from an external source, one from an arbitrary source, one from a GitHub repository
44
+ * - two from the .org repo, where one demonstrates the use of the `is_callable` argument
45
+ *
46
+ * The variables passed to the `tgmpa()` function should be:
47
+ * - an array of plugin arrays;
48
+ * - optionally a configuration array.
49
+ * If you are not changing anything in the configuration array, you can remove the array and remove the
50
+ * variable from the function call: `tgmpa( $plugins );`.
51
+ * In that case, the TGMPA default settings will be used.
52
+ *
53
+ * This function is hooked into `tgmpa_register`, which is fired on the WP `init` action on priority 10.
54
+ */
55
+ function premium_addons_required_plugins() {
56
+ /*
57
+ * Array of plugin arrays. Required keys are name and slug.
58
+ * If the source is NOT from the .org repo, then source is also required.
59
+ */
60
+ $plugins = array(
61
+ array(
62
+ 'name' => __( 'Elementor Page Builder', 'premium_elementor' ),
63
+ 'slug' => 'elementor',
64
+ 'required' => true
65
+ ),
66
+
67
+ );
68
+
69
+ /*
70
+ * Array of configuration settings. Amend each line as needed.
71
+ *
72
+ * TGMPA will start providing localized text strings soon. If you already have translations of our standard
73
+ * strings available, please help us make TGMPA even better by giving us access to these translations or by
74
+ * sending in a pull-request with .po file(s) with the translations.
75
+ *
76
+ * Only uncomment the strings in the config array if you want to customize the strings.
77
+ */
78
+ $config = array(
79
+ 'id' => 'premium-addons-elementor', // Unique ID for hashing notices for multiple instances of TGMPA.
80
+ 'default_path' => '', // Default absolute path to bundled plugins.
81
+ 'menu' => 'tgmpa-install-plugins', // Menu slug.
82
+ 'parent_slug' => 'themes.php', // Parent menu slug.
83
+ 'capability' => 'manage_options', // Capability needed to view plugin install page, should be a capability associated with the parent menu used.
84
+ 'has_notices' => true, // Show admin notices or not.
85
+ 'dismissable' => true, // If false, a user cannot dismiss the nag message.
86
+ 'dismiss_msg' => '', // If 'dismissable' is false, this message will be output at top of nag.
87
+ 'is_automatic' => false, // Automatically activate plugins after installation or not.
88
+ 'message' => '', // Message to output right before the plugins table.
89
+
90
+ );
91
+
92
+ tgmpa( $plugins, $config );
93
+ }
admin/assets/admin.css ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .pa-header-wrapper {
2
+ background: #eee;
3
+ padding: 20px;
4
+ border: 1px solid #ccc;
5
+ margin-bottom: 40px;
6
+ overflow: hidden;
7
+ }
8
+ .pa-title-left {
9
+ float: left;
10
+ }
11
+ h1.pa-title {
12
+ padding: 0;
13
+ font-weight: bold;
14
+ font-size: 32px;
15
+ margin-top: 5px;
16
+ }
17
+ .pa-title-right{
18
+ float: right;
19
+ }
20
+ .button.pa-btn {
21
+ border: none;
22
+ color: #fff;
23
+ text-align: center;
24
+ padding: 10px 20px;
25
+ max-width: 250px;
26
+ height: auto;
27
+ margin-bottom: 15px;
28
+ font-size: 15px;
29
+ display: block;
30
+ font-weight: bold;
31
+ text-transform: uppercase;
32
+ box-shadow: none;
33
+ -webkit-transition: all 0.3s ease-in-out;
34
+ transition: all 0.3s ease-in-out;
35
+ }
36
+ .pa-btn.pa-save-button {
37
+ background-color: #1A7FC2;
38
+ margin-bottom: 0;
39
+ }
40
+ .pa-settings > h1 {
41
+ text-align: center;
42
+ font-size: 35px;
43
+ font-weight: 600;
44
+ color: #0073aa;
45
+ }
46
+ /*ELements Settings Tab*/
47
+ .pa-elements-notice {
48
+ text-align: center;
49
+ padding: 0.8em;
50
+ font-size: 1.4em;
51
+ font-weight: bold;
52
+ color: #fff;
53
+ border: 1px solid #ddd;
54
+ background-color: #0073aa;
55
+ }
56
+ .pa-element-name {
57
+ font-size: 14px;
58
+ font-weight: bold;
59
+ }
60
+ .pa-elements-table td {
61
+ width: 21%;
62
+ margin-right: 50px;
63
+ }
64
+ .pa-elements-table .pa-element-desc {
65
+ font-weight: 300;
66
+ padding-bottom: 1.5em;
67
+ border-bottom: 1px solid #ddd;
68
+ }
69
+ /* The switch - the box around the slider */
70
+ .switch {
71
+ position: relative;
72
+ display: inline-block;
73
+ width: 60px;
74
+ height: 33px;
75
+ }
76
+ /* Hide default HTML checkbox */
77
+ .switch input {
78
+ display:none;
79
+ }
80
+
81
+ /* The slider */
82
+ .slider {
83
+ position: absolute;
84
+ cursor: pointer;
85
+ top: 0;
86
+ left: 0;
87
+ right: 0;
88
+ bottom: 0;
89
+ background-color: #ccc;
90
+ -webkit-transition: .4s;
91
+ transition: .4s;
92
+ }
93
+
94
+ .slider:before {
95
+ position: absolute;
96
+ content: "";
97
+ height: 23px;
98
+ width: 23px;
99
+ left: 6px;
100
+ bottom: 5.5px;
101
+ box-shadow: 0 0 0 5px #70C1B3 inset;
102
+ background-color: white;
103
+ -webkit-transition: .4s;
104
+ transition: .4s;
105
+ }
106
+
107
+ input:checked + .slider {
108
+ background-color: #0073aa;
109
+ }
110
+
111
+ input:focus + .slider {
112
+ box-shadow: 0 0 10px #0073aa;
113
+ }
114
+
115
+ input:checked + .slider:before {
116
+ -webkit-transform: translateX(25px);
117
+ -ms-transform: translateX(25px);
118
+ transform: translateX(25px);
119
+ }
120
+
121
+ /* Rounded sliders */
122
+ .slider.round {
123
+ border-radius: 34px;
124
+ }
125
+ .slider.round:before {
126
+ border-radius: 50%;
127
+ }
128
+ #elements .pa-btn {
129
+ margin-top: 20px;
130
+ }
admin/assets/admin.js ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //Go Between the Tabs
2
+ ( function ( $ ){
3
+ "use strict";
4
+ $(".pa-settings-tabs").tabs();
5
+
6
+
7
+ $("a.pa-tab-list-item").on("click", function () {
8
+ var tabHref = $(this).attr('href');
9
+ window.location.hash = tabHref;
10
+ $("html , body").scrollTop(tabHref);
11
+ });
12
+
13
+
14
+ $(".pa-elements-table input[type='checkbox']").on("click", function(){
15
+ $(".pa-save-button").addClass("pa-save-now");
16
+ });
17
+
18
+
19
+ $( 'form#pa-settings' ).on( 'submit', function(e) {
20
+ e.preventDefault();
21
+ $.ajax( {
22
+ url: settings.ajaxurl,
23
+ type: 'post',
24
+ data: {
25
+ action: 'save_settings_with_ajax',
26
+ fields: $( 'form#pa-settings' ).serialize(),
27
+ },
28
+ success: function( response ) {
29
+ swal(
30
+ 'Settings Saved!',
31
+ 'Click OK to continue',
32
+ 'success'
33
+ );
34
+ },
35
+ error: function() {
36
+ swal(
37
+ 'Oops...',
38
+ 'Something Wrong!',
39
+ );
40
+ }
41
+ } );
42
+
43
+ } );
44
+
45
+ } )(jQuery);
admin/assets/js/sweetalert2/css/sweetalert2.min.css ADDED
@@ -0,0 +1 @@
 
1
+ body.swal2-shown{overflow-y:hidden}body.swal2-iosfix{position:fixed;left:0;right:0}.swal2-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;top:0;left:0;bottom:0;right:0;padding:10px;background-color:transparent;z-index:1060}.swal2-container.swal2-fade{-webkit-transition:background-color .1s;transition:background-color .1s}.swal2-container.swal2-shown{background-color:rgba(0,0,0,.4)}.swal2-modal{background-color:#fff;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;border-radius:5px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;margin:auto;overflow-x:hidden;overflow-y:auto;display:none;position:relative;max-width:100%}.swal2-modal:focus{outline:0}.swal2-modal.swal2-loading{overflow-y:hidden}.swal2-modal .swal2-title{color:#595959;font-size:30px;text-align:center;font-weight:600;text-transform:none;position:relative;margin:0 0 .4em;padding:0;display:block;word-wrap:break-word}.swal2-modal .swal2-buttonswrapper{margin-top:15px}.swal2-modal .swal2-buttonswrapper:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4;cursor:no-drop}.swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-confirm{-webkit-box-sizing:border-box;box-sizing:border-box;border:4px solid transparent;border-color:transparent;width:40px;height:40px;padding:0;margin:7.5px;vertical-align:top;background-color:transparent!important;color:transparent;cursor:default;border-radius:100%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-cancel{margin-left:30px;margin-right:30px}.swal2-modal .swal2-buttonswrapper.swal2-loading :not(.swal2-styled).swal2-confirm::after{display:inline-block;content:'';margin-left:5px;vertical-align:-1px;height:15px;width:15px;border:3px solid #999;-webkit-box-shadow:1px 1px 1px #fff;box-shadow:1px 1px 1px #fff;border-right-color:transparent;border-radius:50%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-modal .swal2-styled{border:0;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;color:#fff;cursor:pointer;font-size:17px;font-weight:500;margin:15px 5px 0;padding:10px 32px}.swal2-modal .swal2-styled:focus{outline:0;-webkit-box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(50,100,150,.4);box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(50,100,150,.4)}.swal2-modal .swal2-image{margin:20px auto;max-width:100%}.swal2-modal .swal2-close{background:0 0;border:0;margin:0;padding:0;width:38px;height:40px;font-size:36px;line-height:40px;font-family:serif;position:absolute;top:5px;right:8px;cursor:pointer;color:#ccc;-webkit-transition:color .1s ease;transition:color .1s ease}.swal2-modal .swal2-close:hover{color:#d55}.swal2-modal>.swal2-checkbox,.swal2-modal>.swal2-file,.swal2-modal>.swal2-input,.swal2-modal>.swal2-radio,.swal2-modal>.swal2-select,.swal2-modal>.swal2-textarea{display:none}.swal2-modal .swal2-content{font-size:18px;text-align:center;font-weight:300;position:relative;float:none;margin:0;padding:0;line-height:normal;color:#545454;word-wrap:break-word}.swal2-modal .swal2-checkbox,.swal2-modal .swal2-file,.swal2-modal .swal2-input,.swal2-modal .swal2-radio,.swal2-modal .swal2-select,.swal2-modal .swal2-textarea{margin:20px auto}.swal2-modal .swal2-file,.swal2-modal .swal2-input,.swal2-modal .swal2-textarea{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:18px;border-radius:3px;border:1px solid #d9d9d9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.06);box-shadow:inset 0 1px 1px rgba(0,0,0,.06);-webkit-transition:border-color .3s,-webkit-box-shadow .3s;transition:border-color .3s,-webkit-box-shadow .3s;transition:border-color .3s,box-shadow .3s;transition:border-color .3s,box-shadow .3s,-webkit-box-shadow .3s}.swal2-modal .swal2-file.swal2-inputerror,.swal2-modal .swal2-input.swal2-inputerror,.swal2-modal .swal2-textarea.swal2-inputerror{border-color:#f27474!important;-webkit-box-shadow:0 0 2px #f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-modal .swal2-file:focus,.swal2-modal .swal2-input:focus,.swal2-modal .swal2-textarea:focus{outline:0;border:1px solid #b4dbed;-webkit-box-shadow:0 0 3px #c4e6f5;box-shadow:0 0 3px #c4e6f5}.swal2-modal .swal2-file::-webkit-input-placeholder,.swal2-modal .swal2-input::-webkit-input-placeholder,.swal2-modal .swal2-textarea::-webkit-input-placeholder{color:#ccc}.swal2-modal .swal2-file:-ms-input-placeholder,.swal2-modal .swal2-input:-ms-input-placeholder,.swal2-modal .swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-modal .swal2-file::placeholder,.swal2-modal .swal2-input::placeholder,.swal2-modal .swal2-textarea::placeholder{color:#ccc}.swal2-modal .swal2-range input{float:left;width:80%}.swal2-modal .swal2-range output{float:right;width:20%;font-size:20px;font-weight:600;text-align:center}.swal2-modal .swal2-range input,.swal2-modal .swal2-range output{height:43px;line-height:43px;vertical-align:middle;margin:20px auto;padding:0}.swal2-modal .swal2-input{height:43px;padding:0 12px}.swal2-modal .swal2-input[type=number]{max-width:150px}.swal2-modal .swal2-file{font-size:20px}.swal2-modal .swal2-textarea{height:108px;padding:12px}.swal2-modal .swal2-select{color:#545454;font-size:inherit;padding:5px 10px;min-width:40%;max-width:100%}.swal2-modal .swal2-radio{border:0}.swal2-modal .swal2-radio label:not(:first-child){margin-left:20px}.swal2-modal .swal2-radio input,.swal2-modal .swal2-radio span{vertical-align:middle}.swal2-modal .swal2-radio input{margin:0 3px 0 0}.swal2-modal .swal2-checkbox{color:#545454}.swal2-modal .swal2-checkbox input,.swal2-modal .swal2-checkbox span{vertical-align:middle}.swal2-modal .swal2-validationerror{background-color:#f0f0f0;margin:0 -20px;overflow:hidden;padding:10px;color:gray;font-size:16px;font-weight:300;display:none}.swal2-modal .swal2-validationerror::before{content:'!';display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:10px}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}.swal2-icon{width:80px;height:80px;border:4px solid transparent;border-radius:50%;margin:20px auto 30px;padding:0;position:relative;-webkit-box-sizing:content-box;box-sizing:content-box;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;display:block}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.swal2-icon.swal2-warning{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#f8bb86;border-color:#facea8;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-info{font-family:'Open Sans',sans-serif;color:#3fc3ee;border-color:#9de0f6;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-question{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#87adbd;border-color:#c9dae1;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{border-radius:50%;position:absolute;width:60px;height:120px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.swal2-icon.swal2-success .swal2-success-ring{width:80px;height:80px;border:4px solid rgba(165,220,134,.2);border-radius:50%;-webkit-box-sizing:content-box;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal2-icon.swal2-success .swal2-success-fix{width:7px;height:90px;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-progresssteps{font-weight:600;margin:0 0 20px;padding:0}.swal2-progresssteps li{display:inline-block;position:relative}.swal2-progresssteps .swal2-progresscircle{background:#3085d6;border-radius:2em;color:#fff;height:2em;line-height:2em;text-align:center;width:2em;z-index:20}.swal2-progresssteps .swal2-progresscircle:first-child{margin-left:0}.swal2-progresssteps .swal2-progresscircle:last-child{margin-right:0}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep{background:#3085d6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progresscircle{background:#add8e6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progressline{background:#add8e6}.swal2-progresssteps .swal2-progressline{background:#3085d6;height:.4em;margin:0 -1px;z-index:10}[class^=swal2]{-webkit-tap-highlight-color:transparent}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}.swal2-show{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.swal2-show.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-hide{-webkit-animation:hideSweetAlert .15s forwards;animation:hideSweetAlert .15s forwards}.swal2-hide.swal2-noanimation{-webkit-animation:none;animation:none}@-webkit-keyframes animate-success-tip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@keyframes animate-success-tip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@-webkit-keyframes animate-success-long{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@keyframes animate-success-long{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}100%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}100%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}.swal2-animate-success-line-tip{-webkit-animation:animate-success-tip .75s;animation:animate-success-tip .75s}.swal2-animate-success-line-long{-webkit-animation:animate-success-long .75s;animation:animate-success-long .75s}.swal2-success.swal2-animate-success-icon .swal2-success-circular-line-right{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}.swal2-animate-error-icon{-webkit-animation:animate-error-icon .5s;animation:animate-error-icon .5s}@-webkit-keyframes animate-x-mark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animate-x-mark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.swal2-animate-x-mark{-webkit-animation:animate-x-mark .5s;animation:animate-x-mark .5s}@-webkit-keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}
admin/assets/js/sweetalert2/js/core.js ADDED
@@ -0,0 +1,7613 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * core-js 2.4.1
3
+ * https://github.com/zloirock/core-js
4
+ * License: http://rock.mit-license.org
5
+ * © 2016 Denis Pushkarev
6
+ */
7
+ !function(__e, __g, undefined){
8
+ 'use strict';
9
+ /******/ (function(modules) { // webpackBootstrap
10
+ /******/ // The module cache
11
+ /******/ var installedModules = {};
12
+
13
+ /******/ // The require function
14
+ /******/ function __webpack_require__(moduleId) {
15
+
16
+ /******/ // Check if module is in cache
17
+ /******/ if(installedModules[moduleId])
18
+ /******/ return installedModules[moduleId].exports;
19
+
20
+ /******/ // Create a new module (and put it into the cache)
21
+ /******/ var module = installedModules[moduleId] = {
22
+ /******/ exports: {},
23
+ /******/ id: moduleId,
24
+ /******/ loaded: false
25
+ /******/ };
26
+
27
+ /******/ // Execute the module function
28
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
29
+
30
+ /******/ // Flag the module as loaded
31
+ /******/ module.loaded = true;
32
+
33
+ /******/ // Return the exports of the module
34
+ /******/ return module.exports;
35
+ /******/ }
36
+
37
+
38
+ /******/ // expose the modules object (__webpack_modules__)
39
+ /******/ __webpack_require__.m = modules;
40
+
41
+ /******/ // expose the module cache
42
+ /******/ __webpack_require__.c = installedModules;
43
+
44
+ /******/ // __webpack_public_path__
45
+ /******/ __webpack_require__.p = "";
46
+
47
+ /******/ // Load entry module and return exports
48
+ /******/ return __webpack_require__(0);
49
+ /******/ })
50
+ /************************************************************************/
51
+ /******/ ([
52
+ /* 0 */
53
+ /***/ function(module, exports, __webpack_require__) {
54
+
55
+ __webpack_require__(1);
56
+ __webpack_require__(50);
57
+ __webpack_require__(51);
58
+ __webpack_require__(52);
59
+ __webpack_require__(54);
60
+ __webpack_require__(55);
61
+ __webpack_require__(58);
62
+ __webpack_require__(59);
63
+ __webpack_require__(60);
64
+ __webpack_require__(61);
65
+ __webpack_require__(62);
66
+ __webpack_require__(63);
67
+ __webpack_require__(64);
68
+ __webpack_require__(65);
69
+ __webpack_require__(66);
70
+ __webpack_require__(68);
71
+ __webpack_require__(70);
72
+ __webpack_require__(72);
73
+ __webpack_require__(74);
74
+ __webpack_require__(77);
75
+ __webpack_require__(78);
76
+ __webpack_require__(79);
77
+ __webpack_require__(83);
78
+ __webpack_require__(86);
79
+ __webpack_require__(87);
80
+ __webpack_require__(88);
81
+ __webpack_require__(89);
82
+ __webpack_require__(91);
83
+ __webpack_require__(92);
84
+ __webpack_require__(93);
85
+ __webpack_require__(94);
86
+ __webpack_require__(95);
87
+ __webpack_require__(97);
88
+ __webpack_require__(99);
89
+ __webpack_require__(100);
90
+ __webpack_require__(101);
91
+ __webpack_require__(103);
92
+ __webpack_require__(104);
93
+ __webpack_require__(105);
94
+ __webpack_require__(107);
95
+ __webpack_require__(108);
96
+ __webpack_require__(109);
97
+ __webpack_require__(111);
98
+ __webpack_require__(112);
99
+ __webpack_require__(113);
100
+ __webpack_require__(114);
101
+ __webpack_require__(115);
102
+ __webpack_require__(116);
103
+ __webpack_require__(117);
104
+ __webpack_require__(118);
105
+ __webpack_require__(119);
106
+ __webpack_require__(120);
107
+ __webpack_require__(121);
108
+ __webpack_require__(122);
109
+ __webpack_require__(123);
110
+ __webpack_require__(124);
111
+ __webpack_require__(126);
112
+ __webpack_require__(130);
113
+ __webpack_require__(131);
114
+ __webpack_require__(132);
115
+ __webpack_require__(133);
116
+ __webpack_require__(137);
117
+ __webpack_require__(139);
118
+ __webpack_require__(140);
119
+ __webpack_require__(141);
120
+ __webpack_require__(142);
121
+ __webpack_require__(143);
122
+ __webpack_require__(144);
123
+ __webpack_require__(145);
124
+ __webpack_require__(146);
125
+ __webpack_require__(147);
126
+ __webpack_require__(148);
127
+ __webpack_require__(149);
128
+ __webpack_require__(150);
129
+ __webpack_require__(151);
130
+ __webpack_require__(152);
131
+ __webpack_require__(158);
132
+ __webpack_require__(159);
133
+ __webpack_require__(161);
134
+ __webpack_require__(162);
135
+ __webpack_require__(163);
136
+ __webpack_require__(167);
137
+ __webpack_require__(168);
138
+ __webpack_require__(169);
139
+ __webpack_require__(170);
140
+ __webpack_require__(171);
141
+ __webpack_require__(173);
142
+ __webpack_require__(174);
143
+ __webpack_require__(175);
144
+ __webpack_require__(176);
145
+ __webpack_require__(179);
146
+ __webpack_require__(181);
147
+ __webpack_require__(182);
148
+ __webpack_require__(183);
149
+ __webpack_require__(185);
150
+ __webpack_require__(187);
151
+ __webpack_require__(189);
152
+ __webpack_require__(190);
153
+ __webpack_require__(191);
154
+ __webpack_require__(193);
155
+ __webpack_require__(194);
156
+ __webpack_require__(195);
157
+ __webpack_require__(196);
158
+ __webpack_require__(203);
159
+ __webpack_require__(206);
160
+ __webpack_require__(207);
161
+ __webpack_require__(209);
162
+ __webpack_require__(210);
163
+ __webpack_require__(211);
164
+ __webpack_require__(212);
165
+ __webpack_require__(213);
166
+ __webpack_require__(214);
167
+ __webpack_require__(215);
168
+ __webpack_require__(216);
169
+ __webpack_require__(217);
170
+ __webpack_require__(218);
171
+ __webpack_require__(219);
172
+ __webpack_require__(220);
173
+ __webpack_require__(222);
174
+ __webpack_require__(223);
175
+ __webpack_require__(224);
176
+ __webpack_require__(225);
177
+ __webpack_require__(226);
178
+ __webpack_require__(227);
179
+ __webpack_require__(228);
180
+ __webpack_require__(229);
181
+ __webpack_require__(231);
182
+ __webpack_require__(234);
183
+ __webpack_require__(235);
184
+ __webpack_require__(237);
185
+ __webpack_require__(238);
186
+ __webpack_require__(239);
187
+ __webpack_require__(240);
188
+ __webpack_require__(241);
189
+ __webpack_require__(242);
190
+ __webpack_require__(243);
191
+ __webpack_require__(244);
192
+ __webpack_require__(245);
193
+ __webpack_require__(246);
194
+ __webpack_require__(247);
195
+ __webpack_require__(249);
196
+ __webpack_require__(250);
197
+ __webpack_require__(251);
198
+ __webpack_require__(252);
199
+ __webpack_require__(253);
200
+ __webpack_require__(254);
201
+ __webpack_require__(255);
202
+ __webpack_require__(256);
203
+ __webpack_require__(258);
204
+ __webpack_require__(259);
205
+ __webpack_require__(261);
206
+ __webpack_require__(262);
207
+ __webpack_require__(263);
208
+ __webpack_require__(264);
209
+ __webpack_require__(267);
210
+ __webpack_require__(268);
211
+ __webpack_require__(269);
212
+ __webpack_require__(270);
213
+ __webpack_require__(271);
214
+ __webpack_require__(272);
215
+ __webpack_require__(273);
216
+ __webpack_require__(274);
217
+ __webpack_require__(276);
218
+ __webpack_require__(277);
219
+ __webpack_require__(278);
220
+ __webpack_require__(279);
221
+ __webpack_require__(280);
222
+ __webpack_require__(281);
223
+ __webpack_require__(282);
224
+ __webpack_require__(283);
225
+ __webpack_require__(284);
226
+ __webpack_require__(285);
227
+ __webpack_require__(286);
228
+ __webpack_require__(287);
229
+ __webpack_require__(288);
230
+ __webpack_require__(291);
231
+ __webpack_require__(156);
232
+ __webpack_require__(293);
233
+ __webpack_require__(292);
234
+ __webpack_require__(294);
235
+ __webpack_require__(295);
236
+ __webpack_require__(296);
237
+ __webpack_require__(297);
238
+ __webpack_require__(298);
239
+ __webpack_require__(300);
240
+ __webpack_require__(301);
241
+ __webpack_require__(302);
242
+ __webpack_require__(304);
243
+ module.exports = __webpack_require__(305);
244
+
245
+
246
+ /***/ },
247
+ /* 1 */
248
+ /***/ function(module, exports, __webpack_require__) {
249
+
250
+ 'use strict';
251
+ // ECMAScript 6 symbols shim
252
+ var global = __webpack_require__(2)
253
+ , has = __webpack_require__(3)
254
+ , DESCRIPTORS = __webpack_require__(4)
255
+ , $export = __webpack_require__(6)
256
+ , redefine = __webpack_require__(16)
257
+ , META = __webpack_require__(20).KEY
258
+ , $fails = __webpack_require__(5)
259
+ , shared = __webpack_require__(21)
260
+ , setToStringTag = __webpack_require__(22)
261
+ , uid = __webpack_require__(17)
262
+ , wks = __webpack_require__(23)
263
+ , wksExt = __webpack_require__(24)
264
+ , wksDefine = __webpack_require__(25)
265
+ , keyOf = __webpack_require__(27)
266
+ , enumKeys = __webpack_require__(40)
267
+ , isArray = __webpack_require__(43)
268
+ , anObject = __webpack_require__(10)
269
+ , toIObject = __webpack_require__(30)
270
+ , toPrimitive = __webpack_require__(14)
271
+ , createDesc = __webpack_require__(15)
272
+ , _create = __webpack_require__(44)
273
+ , gOPNExt = __webpack_require__(47)
274
+ , $GOPD = __webpack_require__(49)
275
+ , $DP = __webpack_require__(9)
276
+ , $keys = __webpack_require__(28)
277
+ , gOPD = $GOPD.f
278
+ , dP = $DP.f
279
+ , gOPN = gOPNExt.f
280
+ , $Symbol = global.Symbol
281
+ , $JSON = global.JSON
282
+ , _stringify = $JSON && $JSON.stringify
283
+ , PROTOTYPE = 'prototype'
284
+ , HIDDEN = wks('_hidden')
285
+ , TO_PRIMITIVE = wks('toPrimitive')
286
+ , isEnum = {}.propertyIsEnumerable
287
+ , SymbolRegistry = shared('symbol-registry')
288
+ , AllSymbols = shared('symbols')
289
+ , OPSymbols = shared('op-symbols')
290
+ , ObjectProto = Object[PROTOTYPE]
291
+ , USE_NATIVE = typeof $Symbol == 'function'
292
+ , QObject = global.QObject;
293
+ // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
294
+ var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
295
+
296
+ // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
297
+ var setSymbolDesc = DESCRIPTORS && $fails(function(){
298
+ return _create(dP({}, 'a', {
299
+ get: function(){ return dP(this, 'a', {value: 7}).a; }
300
+ })).a != 7;
301
+ }) ? function(it, key, D){
302
+ var protoDesc = gOPD(ObjectProto, key);
303
+ if(protoDesc)delete ObjectProto[key];
304
+ dP(it, key, D);
305
+ if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);
306
+ } : dP;
307
+
308
+ var wrap = function(tag){
309
+ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
310
+ sym._k = tag;
311
+ return sym;
312
+ };
313
+
314
+ var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){
315
+ return typeof it == 'symbol';
316
+ } : function(it){
317
+ return it instanceof $Symbol;
318
+ };
319
+
320
+ var $defineProperty = function defineProperty(it, key, D){
321
+ if(it === ObjectProto)$defineProperty(OPSymbols, key, D);
322
+ anObject(it);
323
+ key = toPrimitive(key, true);
324
+ anObject(D);
325
+ if(has(AllSymbols, key)){
326
+ if(!D.enumerable){
327
+ if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));
328
+ it[HIDDEN][key] = true;
329
+ } else {
330
+ if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
331
+ D = _create(D, {enumerable: createDesc(0, false)});
332
+ } return setSymbolDesc(it, key, D);
333
+ } return dP(it, key, D);
334
+ };
335
+ var $defineProperties = function defineProperties(it, P){
336
+ anObject(it);
337
+ var keys = enumKeys(P = toIObject(P))
338
+ , i = 0
339
+ , l = keys.length
340
+ , key;
341
+ while(l > i)$defineProperty(it, key = keys[i++], P[key]);
342
+ return it;
343
+ };
344
+ var $create = function create(it, P){
345
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
346
+ };
347
+ var $propertyIsEnumerable = function propertyIsEnumerable(key){
348
+ var E = isEnum.call(this, key = toPrimitive(key, true));
349
+ if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;
350
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
351
+ };
352
+ var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
353
+ it = toIObject(it);
354
+ key = toPrimitive(key, true);
355
+ if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;
356
+ var D = gOPD(it, key);
357
+ if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
358
+ return D;
359
+ };
360
+ var $getOwnPropertyNames = function getOwnPropertyNames(it){
361
+ var names = gOPN(toIObject(it))
362
+ , result = []
363
+ , i = 0
364
+ , key;
365
+ while(names.length > i){
366
+ if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);
367
+ } return result;
368
+ };
369
+ var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
370
+ var IS_OP = it === ObjectProto
371
+ , names = gOPN(IS_OP ? OPSymbols : toIObject(it))
372
+ , result = []
373
+ , i = 0
374
+ , key;
375
+ while(names.length > i){
376
+ if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);
377
+ } return result;
378
+ };
379
+
380
+ // 19.4.1.1 Symbol([description])
381
+ if(!USE_NATIVE){
382
+ $Symbol = function Symbol(){
383
+ if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');
384
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
385
+ var $set = function(value){
386
+ if(this === ObjectProto)$set.call(OPSymbols, value);
387
+ if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
388
+ setSymbolDesc(this, tag, createDesc(1, value));
389
+ };
390
+ if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});
391
+ return wrap(tag);
392
+ };
393
+ redefine($Symbol[PROTOTYPE], 'toString', function toString(){
394
+ return this._k;
395
+ });
396
+
397
+ $GOPD.f = $getOwnPropertyDescriptor;
398
+ $DP.f = $defineProperty;
399
+ __webpack_require__(48).f = gOPNExt.f = $getOwnPropertyNames;
400
+ __webpack_require__(42).f = $propertyIsEnumerable;
401
+ __webpack_require__(41).f = $getOwnPropertySymbols;
402
+
403
+ if(DESCRIPTORS && !__webpack_require__(26)){
404
+ redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
405
+ }
406
+
407
+ wksExt.f = function(name){
408
+ return wrap(wks(name));
409
+ }
410
+ }
411
+
412
+ $export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});
413
+
414
+ for(var symbols = (
415
+ // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
416
+ 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
417
+ ).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);
418
+
419
+ for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);
420
+
421
+ $export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
422
+ // 19.4.2.1 Symbol.for(key)
423
+ 'for': function(key){
424
+ return has(SymbolRegistry, key += '')
425
+ ? SymbolRegistry[key]
426
+ : SymbolRegistry[key] = $Symbol(key);
427
+ },
428
+ // 19.4.2.5 Symbol.keyFor(sym)
429
+ keyFor: function keyFor(key){
430
+ if(isSymbol(key))return keyOf(SymbolRegistry, key);
431
+ throw TypeError(key + ' is not a symbol!');
432
+ },
433
+ useSetter: function(){ setter = true; },
434
+ useSimple: function(){ setter = false; }
435
+ });
436
+
437
+ $export($export.S + $export.F * !USE_NATIVE, 'Object', {
438
+ // 19.1.2.2 Object.create(O [, Properties])
439
+ create: $create,
440
+ // 19.1.2.4 Object.defineProperty(O, P, Attributes)
441
+ defineProperty: $defineProperty,
442
+ // 19.1.2.3 Object.defineProperties(O, Properties)
443
+ defineProperties: $defineProperties,
444
+ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
445
+ getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
446
+ // 19.1.2.7 Object.getOwnPropertyNames(O)
447
+ getOwnPropertyNames: $getOwnPropertyNames,
448
+ // 19.1.2.8 Object.getOwnPropertySymbols(O)
449
+ getOwnPropertySymbols: $getOwnPropertySymbols
450
+ });
451
+
452
+ // 24.3.2 JSON.stringify(value [, replacer [, space]])
453
+ $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){
454
+ var S = $Symbol();
455
+ // MS Edge converts symbol values to JSON as {}
456
+ // WebKit converts symbol values to JSON as null
457
+ // V8 throws on boxed symbols
458
+ return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
459
+ })), 'JSON', {
460
+ stringify: function stringify(it){
461
+ if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
462
+ var args = [it]
463
+ , i = 1
464
+ , replacer, $replacer;
465
+ while(arguments.length > i)args.push(arguments[i++]);
466
+ replacer = args[1];
467
+ if(typeof replacer == 'function')$replacer = replacer;
468
+ if($replacer || !isArray(replacer))replacer = function(key, value){
469
+ if($replacer)value = $replacer.call(this, key, value);
470
+ if(!isSymbol(value))return value;
471
+ };
472
+ args[1] = replacer;
473
+ return _stringify.apply($JSON, args);
474
+ }
475
+ });
476
+
477
+ // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
478
+ $Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(8)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
479
+ // 19.4.3.5 Symbol.prototype[@@toStringTag]
480
+ setToStringTag($Symbol, 'Symbol');
481
+ // 20.2.1.9 Math[@@toStringTag]
482
+ setToStringTag(Math, 'Math', true);
483
+ // 24.3.3 JSON[@@toStringTag]
484
+ setToStringTag(global.JSON, 'JSON', true);
485
+
486
+ /***/ },
487
+ /* 2 */
488
+ /***/ function(module, exports) {
489
+
490
+ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
491
+ var global = module.exports = typeof window != 'undefined' && window.Math == Math
492
+ ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
493
+ if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
494
+
495
+ /***/ },
496
+ /* 3 */
497
+ /***/ function(module, exports) {
498
+
499
+ var hasOwnProperty = {}.hasOwnProperty;
500
+ module.exports = function(it, key){
501
+ return hasOwnProperty.call(it, key);
502
+ };
503
+
504
+ /***/ },
505
+ /* 4 */
506
+ /***/ function(module, exports, __webpack_require__) {
507
+
508
+ // Thank's IE8 for his funny defineProperty
509
+ module.exports = !__webpack_require__(5)(function(){
510
+ return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
511
+ });
512
+
513
+ /***/ },
514
+ /* 5 */
515
+ /***/ function(module, exports) {
516
+
517
+ module.exports = function(exec){
518
+ try {
519
+ return !!exec();
520
+ } catch(e){
521
+ return true;
522
+ }
523
+ };
524
+
525
+ /***/ },
526
+ /* 6 */
527
+ /***/ function(module, exports, __webpack_require__) {
528
+
529
+ var global = __webpack_require__(2)
530
+ , core = __webpack_require__(7)
531
+ , hide = __webpack_require__(8)
532
+ , redefine = __webpack_require__(16)
533
+ , ctx = __webpack_require__(18)
534
+ , PROTOTYPE = 'prototype';
535
+
536
+ var $export = function(type, name, source){
537
+ var IS_FORCED = type & $export.F
538
+ , IS_GLOBAL = type & $export.G
539
+ , IS_STATIC = type & $export.S
540
+ , IS_PROTO = type & $export.P
541
+ , IS_BIND = type & $export.B
542
+ , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]
543
+ , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
544
+ , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})
545
+ , key, own, out, exp;
546
+ if(IS_GLOBAL)source = name;
547
+ for(key in source){
548
+ // contains in native
549
+ own = !IS_FORCED && target && target[key] !== undefined;
550
+ // export native or passed
551
+ out = (own ? target : source)[key];
552
+ // bind timers to global for call from export context
553
+ exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
554
+ // extend global
555
+ if(target)redefine(target, key, out, type & $export.U);
556
+ // export
557
+ if(exports[key] != out)hide(exports, key, exp);
558
+ if(IS_PROTO && expProto[key] != out)expProto[key] = out;
559
+ }
560
+ };
561
+ global.core = core;
562
+ // type bitmap
563
+ $export.F = 1; // forced
564
+ $export.G = 2; // global
565
+ $export.S = 4; // static
566
+ $export.P = 8; // proto
567
+ $export.B = 16; // bind
568
+ $export.W = 32; // wrap
569
+ $export.U = 64; // safe
570
+ $export.R = 128; // real proto method for `library`
571
+ module.exports = $export;
572
+
573
+ /***/ },
574
+ /* 7 */
575
+ /***/ function(module, exports) {
576
+
577
+ var core = module.exports = {version: '2.4.0'};
578
+ if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
579
+
580
+ /***/ },
581
+ /* 8 */
582
+ /***/ function(module, exports, __webpack_require__) {
583
+
584
+ var dP = __webpack_require__(9)
585
+ , createDesc = __webpack_require__(15);
586
+ module.exports = __webpack_require__(4) ? function(object, key, value){
587
+ return dP.f(object, key, createDesc(1, value));
588
+ } : function(object, key, value){
589
+ object[key] = value;
590
+ return object;
591
+ };
592
+
593
+ /***/ },
594
+ /* 9 */
595
+ /***/ function(module, exports, __webpack_require__) {
596
+
597
+ var anObject = __webpack_require__(10)
598
+ , IE8_DOM_DEFINE = __webpack_require__(12)
599
+ , toPrimitive = __webpack_require__(14)
600
+ , dP = Object.defineProperty;
601
+
602
+ exports.f = __webpack_require__(4) ? Object.defineProperty : function defineProperty(O, P, Attributes){
603
+ anObject(O);
604
+ P = toPrimitive(P, true);
605
+ anObject(Attributes);
606
+ if(IE8_DOM_DEFINE)try {
607
+ return dP(O, P, Attributes);
608
+ } catch(e){ /* empty */ }
609
+ if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
610
+ if('value' in Attributes)O[P] = Attributes.value;
611
+ return O;
612
+ };
613
+
614
+ /***/ },
615
+ /* 10 */
616
+ /***/ function(module, exports, __webpack_require__) {
617
+
618
+ var isObject = __webpack_require__(11);
619
+ module.exports = function(it){
620
+ if(!isObject(it))throw TypeError(it + ' is not an object!');
621
+ return it;
622
+ };
623
+
624
+ /***/ },
625
+ /* 11 */
626
+ /***/ function(module, exports) {
627
+
628
+ module.exports = function(it){
629
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
630
+ };
631
+
632
+ /***/ },
633
+ /* 12 */
634
+ /***/ function(module, exports, __webpack_require__) {
635
+
636
+ module.exports = !__webpack_require__(4) && !__webpack_require__(5)(function(){
637
+ return Object.defineProperty(__webpack_require__(13)('div'), 'a', {get: function(){ return 7; }}).a != 7;
638
+ });
639
+
640
+ /***/ },
641
+ /* 13 */
642
+ /***/ function(module, exports, __webpack_require__) {
643
+
644
+ var isObject = __webpack_require__(11)
645
+ , document = __webpack_require__(2).document
646
+ // in old IE typeof document.createElement is 'object'
647
+ , is = isObject(document) && isObject(document.createElement);
648
+ module.exports = function(it){
649
+ return is ? document.createElement(it) : {};
650
+ };
651
+
652
+ /***/ },
653
+ /* 14 */
654
+ /***/ function(module, exports, __webpack_require__) {
655
+
656
+ // 7.1.1 ToPrimitive(input [, PreferredType])
657
+ var isObject = __webpack_require__(11);
658
+ // instead of the ES6 spec version, we didn't implement @@toPrimitive case
659
+ // and the second argument - flag - preferred type is a string
660
+ module.exports = function(it, S){
661
+ if(!isObject(it))return it;
662
+ var fn, val;
663
+ if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
664
+ if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
665
+ if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
666
+ throw TypeError("Can't convert object to primitive value");
667
+ };
668
+
669
+ /***/ },
670
+ /* 15 */
671
+ /***/ function(module, exports) {
672
+
673
+ module.exports = function(bitmap, value){
674
+ return {
675
+ enumerable : !(bitmap & 1),
676
+ configurable: !(bitmap & 2),
677
+ writable : !(bitmap & 4),
678
+ value : value
679
+ };
680
+ };
681
+
682
+ /***/ },
683
+ /* 16 */
684
+ /***/ function(module, exports, __webpack_require__) {
685
+
686
+ var global = __webpack_require__(2)
687
+ , hide = __webpack_require__(8)
688
+ , has = __webpack_require__(3)
689
+ , SRC = __webpack_require__(17)('src')
690
+ , TO_STRING = 'toString'
691
+ , $toString = Function[TO_STRING]
692
+ , TPL = ('' + $toString).split(TO_STRING);
693
+
694
+ __webpack_require__(7).inspectSource = function(it){
695
+ return $toString.call(it);
696
+ };
697
+
698
+ (module.exports = function(O, key, val, safe){
699
+ var isFunction = typeof val == 'function';
700
+ if(isFunction)has(val, 'name') || hide(val, 'name', key);
701
+ if(O[key] === val)return;
702
+ if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
703
+ if(O === global){
704
+ O[key] = val;
705
+ } else {
706
+ if(!safe){
707
+ delete O[key];
708
+ hide(O, key, val);
709
+ } else {
710
+ if(O[key])O[key] = val;
711
+ else hide(O, key, val);
712
+ }
713
+ }
714
+ // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
715
+ })(Function.prototype, TO_STRING, function toString(){
716
+ return typeof this == 'function' && this[SRC] || $toString.call(this);
717
+ });
718
+
719
+ /***/ },
720
+ /* 17 */
721
+ /***/ function(module, exports) {
722
+
723
+ var id = 0
724
+ , px = Math.random();
725
+ module.exports = function(key){
726
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
727
+ };
728
+
729
+ /***/ },
730
+ /* 18 */
731
+ /***/ function(module, exports, __webpack_require__) {
732
+
733
+ // optional / simple context binding
734
+ var aFunction = __webpack_require__(19);
735
+ module.exports = function(fn, that, length){
736
+ aFunction(fn);
737
+ if(that === undefined)return fn;
738
+ switch(length){
739
+ case 1: return function(a){
740
+ return fn.call(that, a);
741
+ };
742
+ case 2: return function(a, b){
743
+ return fn.call(that, a, b);
744
+ };
745
+ case 3: return function(a, b, c){
746
+ return fn.call(that, a, b, c);
747
+ };
748
+ }
749
+ return function(/* ...args */){
750
+ return fn.apply(that, arguments);
751
+ };
752
+ };
753
+
754
+ /***/ },
755
+ /* 19 */
756
+ /***/ function(module, exports) {
757
+
758
+ module.exports = function(it){
759
+ if(typeof it != 'function')throw TypeError(it + ' is not a function!');
760
+ return it;
761
+ };
762
+
763
+ /***/ },
764
+ /* 20 */
765
+ /***/ function(module, exports, __webpack_require__) {
766
+
767
+ var META = __webpack_require__(17)('meta')
768
+ , isObject = __webpack_require__(11)
769
+ , has = __webpack_require__(3)
770
+ , setDesc = __webpack_require__(9).f
771
+ , id = 0;
772
+ var isExtensible = Object.isExtensible || function(){
773
+ return true;
774
+ };
775
+ var FREEZE = !__webpack_require__(5)(function(){
776
+ return isExtensible(Object.preventExtensions({}));
777
+ });
778
+ var setMeta = function(it){
779
+ setDesc(it, META, {value: {
780
+ i: 'O' + ++id, // object ID
781
+ w: {} // weak collections IDs
782
+ }});
783
+ };
784
+ var fastKey = function(it, create){
785
+ // return primitive with prefix
786
+ if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
787
+ if(!has(it, META)){
788
+ // can't set metadata to uncaught frozen object
789
+ if(!isExtensible(it))return 'F';
790
+ // not necessary to add metadata
791
+ if(!create)return 'E';
792
+ // add missing metadata
793
+ setMeta(it);
794
+ // return object ID
795
+ } return it[META].i;
796
+ };
797
+ var getWeak = function(it, create){
798
+ if(!has(it, META)){
799
+ // can't set metadata to uncaught frozen object
800
+ if(!isExtensible(it))return true;
801
+ // not necessary to add metadata
802
+ if(!create)return false;
803
+ // add missing metadata
804
+ setMeta(it);
805
+ // return hash weak collections IDs
806
+ } return it[META].w;
807
+ };
808
+ // add metadata on freeze-family methods calling
809
+ var onFreeze = function(it){
810
+ if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);
811
+ return it;
812
+ };
813
+ var meta = module.exports = {
814
+ KEY: META,
815
+ NEED: false,
816
+ fastKey: fastKey,
817
+ getWeak: getWeak,
818
+ onFreeze: onFreeze
819
+ };
820
+
821
+ /***/ },
822
+ /* 21 */
823
+ /***/ function(module, exports, __webpack_require__) {
824
+
825
+ var global = __webpack_require__(2)
826
+ , SHARED = '__core-js_shared__'
827
+ , store = global[SHARED] || (global[SHARED] = {});
828
+ module.exports = function(key){
829
+ return store[key] || (store[key] = {});
830
+ };
831
+
832
+ /***/ },
833
+ /* 22 */
834
+ /***/ function(module, exports, __webpack_require__) {
835
+
836
+ var def = __webpack_require__(9).f
837
+ , has = __webpack_require__(3)
838
+ , TAG = __webpack_require__(23)('toStringTag');
839
+
840
+ module.exports = function(it, tag, stat){
841
+ if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
842
+ };
843
+
844
+ /***/ },
845
+ /* 23 */
846
+ /***/ function(module, exports, __webpack_require__) {
847
+
848
+ var store = __webpack_require__(21)('wks')
849
+ , uid = __webpack_require__(17)
850
+ , Symbol = __webpack_require__(2).Symbol
851
+ , USE_SYMBOL = typeof Symbol == 'function';
852
+
853
+ var $exports = module.exports = function(name){
854
+ return store[name] || (store[name] =
855
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
856
+ };
857
+
858
+ $exports.store = store;
859
+
860
+ /***/ },
861
+ /* 24 */
862
+ /***/ function(module, exports, __webpack_require__) {
863
+
864
+ exports.f = __webpack_require__(23);
865
+
866
+ /***/ },
867
+ /* 25 */
868
+ /***/ function(module, exports, __webpack_require__) {
869
+
870
+ var global = __webpack_require__(2)
871
+ , core = __webpack_require__(7)
872
+ , LIBRARY = __webpack_require__(26)
873
+ , wksExt = __webpack_require__(24)
874
+ , defineProperty = __webpack_require__(9).f;
875
+ module.exports = function(name){
876
+ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
877
+ if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});
878
+ };
879
+
880
+ /***/ },
881
+ /* 26 */
882
+ /***/ function(module, exports) {
883
+
884
+ module.exports = false;
885
+
886
+ /***/ },
887
+ /* 27 */
888
+ /***/ function(module, exports, __webpack_require__) {
889
+
890
+ var getKeys = __webpack_require__(28)
891
+ , toIObject = __webpack_require__(30);
892
+ module.exports = function(object, el){
893
+ var O = toIObject(object)
894
+ , keys = getKeys(O)
895
+ , length = keys.length
896
+ , index = 0
897
+ , key;
898
+ while(length > index)if(O[key = keys[index++]] === el)return key;
899
+ };
900
+
901
+ /***/ },
902
+ /* 28 */
903
+ /***/ function(module, exports, __webpack_require__) {
904
+
905
+ // 19.1.2.14 / 15.2.3.14 Object.keys(O)
906
+ var $keys = __webpack_require__(29)
907
+ , enumBugKeys = __webpack_require__(39);
908
+
909
+ module.exports = Object.keys || function keys(O){
910
+ return $keys(O, enumBugKeys);
911
+ };
912
+
913
+ /***/ },
914
+ /* 29 */
915
+ /***/ function(module, exports, __webpack_require__) {
916
+
917
+ var has = __webpack_require__(3)
918
+ , toIObject = __webpack_require__(30)
919
+ , arrayIndexOf = __webpack_require__(34)(false)
920
+ , IE_PROTO = __webpack_require__(38)('IE_PROTO');
921
+
922
+ module.exports = function(object, names){
923
+ var O = toIObject(object)
924
+ , i = 0
925
+ , result = []
926
+ , key;
927
+ for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
928
+ // Don't enum bug & hidden keys
929
+ while(names.length > i)if(has(O, key = names[i++])){
930
+ ~arrayIndexOf(result, key) || result.push(key);
931
+ }
932
+ return result;
933
+ };
934
+
935
+ /***/ },
936
+ /* 30 */
937
+ /***/ function(module, exports, __webpack_require__) {
938
+
939
+ // to indexed object, toObject with fallback for non-array-like ES3 strings
940
+ var IObject = __webpack_require__(31)
941
+ , defined = __webpack_require__(33);
942
+ module.exports = function(it){
943
+ return IObject(defined(it));
944
+ };
945
+
946
+ /***/ },
947
+ /* 31 */
948
+ /***/ function(module, exports, __webpack_require__) {
949
+
950
+ // fallback for non-array-like ES3 and non-enumerable old V8 strings
951
+ var cof = __webpack_require__(32);
952
+ module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
953
+ return cof(it) == 'String' ? it.split('') : Object(it);
954
+ };
955
+
956
+ /***/ },
957
+ /* 32 */
958
+ /***/ function(module, exports) {
959
+
960
+ var toString = {}.toString;
961
+
962
+ module.exports = function(it){
963
+ return toString.call(it).slice(8, -1);
964
+ };
965
+
966
+ /***/ },
967
+ /* 33 */
968
+ /***/ function(module, exports) {
969
+
970
+ // 7.2.1 RequireObjectCoercible(argument)
971
+ module.exports = function(it){
972
+ if(it == undefined)throw TypeError("Can't call method on " + it);
973
+ return it;
974
+ };
975
+
976
+ /***/ },
977
+ /* 34 */
978
+ /***/ function(module, exports, __webpack_require__) {
979
+
980
+ // false -> Array#indexOf
981
+ // true -> Array#includes
982
+ var toIObject = __webpack_require__(30)
983
+ , toLength = __webpack_require__(35)
984
+ , toIndex = __webpack_require__(37);
985
+ module.exports = function(IS_INCLUDES){
986
+ return function($this, el, fromIndex){
987
+ var O = toIObject($this)
988
+ , length = toLength(O.length)
989
+ , index = toIndex(fromIndex, length)
990
+ , value;
991
+ // Array#includes uses SameValueZero equality algorithm
992
+ if(IS_INCLUDES && el != el)while(length > index){
993
+ value = O[index++];
994
+ if(value != value)return true;
995
+ // Array#toIndex ignores holes, Array#includes - not
996
+ } else for(;length > index; index++)if(IS_INCLUDES || index in O){
997
+ if(O[index] === el)return IS_INCLUDES || index || 0;
998
+ } return !IS_INCLUDES && -1;
999
+ };
1000
+ };
1001
+
1002
+ /***/ },
1003
+ /* 35 */
1004
+ /***/ function(module, exports, __webpack_require__) {
1005
+
1006
+ // 7.1.15 ToLength
1007
+ var toInteger = __webpack_require__(36)
1008
+ , min = Math.min;
1009
+ module.exports = function(it){
1010
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
1011
+ };
1012
+
1013
+ /***/ },
1014
+ /* 36 */
1015
+ /***/ function(module, exports) {
1016
+
1017
+ // 7.1.4 ToInteger
1018
+ var ceil = Math.ceil
1019
+ , floor = Math.floor;
1020
+ module.exports = function(it){
1021
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
1022
+ };
1023
+
1024
+ /***/ },
1025
+ /* 37 */
1026
+ /***/ function(module, exports, __webpack_require__) {
1027
+
1028
+ var toInteger = __webpack_require__(36)
1029
+ , max = Math.max
1030
+ , min = Math.min;
1031
+ module.exports = function(index, length){
1032
+ index = toInteger(index);
1033
+ return index < 0 ? max(index + length, 0) : min(index, length);
1034
+ };
1035
+
1036
+ /***/ },
1037
+ /* 38 */
1038
+ /***/ function(module, exports, __webpack_require__) {
1039
+
1040
+ var shared = __webpack_require__(21)('keys')
1041
+ , uid = __webpack_require__(17);
1042
+ module.exports = function(key){
1043
+ return shared[key] || (shared[key] = uid(key));
1044
+ };
1045
+
1046
+ /***/ },
1047
+ /* 39 */
1048
+ /***/ function(module, exports) {
1049
+
1050
+ // IE 8- don't enum bug keys
1051
+ module.exports = (
1052
+ 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
1053
+ ).split(',');
1054
+
1055
+ /***/ },
1056
+ /* 40 */
1057
+ /***/ function(module, exports, __webpack_require__) {
1058
+
1059
+ // all enumerable object keys, includes symbols
1060
+ var getKeys = __webpack_require__(28)
1061
+ , gOPS = __webpack_require__(41)
1062
+ , pIE = __webpack_require__(42);
1063
+ module.exports = function(it){
1064
+ var result = getKeys(it)
1065
+ , getSymbols = gOPS.f;
1066
+ if(getSymbols){
1067
+ var symbols = getSymbols(it)
1068
+ , isEnum = pIE.f
1069
+ , i = 0
1070
+ , key;
1071
+ while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);
1072
+ } return result;
1073
+ };
1074
+
1075
+ /***/ },
1076
+ /* 41 */
1077
+ /***/ function(module, exports) {
1078
+
1079
+ exports.f = Object.getOwnPropertySymbols;
1080
+
1081
+ /***/ },
1082
+ /* 42 */
1083
+ /***/ function(module, exports) {
1084
+
1085
+ exports.f = {}.propertyIsEnumerable;
1086
+
1087
+ /***/ },
1088
+ /* 43 */
1089
+ /***/ function(module, exports, __webpack_require__) {
1090
+
1091
+ // 7.2.2 IsArray(argument)
1092
+ var cof = __webpack_require__(32);
1093
+ module.exports = Array.isArray || function isArray(arg){
1094
+ return cof(arg) == 'Array';
1095
+ };
1096
+
1097
+ /***/ },
1098
+ /* 44 */
1099
+ /***/ function(module, exports, __webpack_require__) {
1100
+
1101
+ // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
1102
+ var anObject = __webpack_require__(10)
1103
+ , dPs = __webpack_require__(45)
1104
+ , enumBugKeys = __webpack_require__(39)
1105
+ , IE_PROTO = __webpack_require__(38)('IE_PROTO')
1106
+ , Empty = function(){ /* empty */ }
1107
+ , PROTOTYPE = 'prototype';
1108
+
1109
+ // Create object with fake `null` prototype: use iframe Object with cleared prototype
1110
+ var createDict = function(){
1111
+ // Thrash, waste and sodomy: IE GC bug
1112
+ var iframe = __webpack_require__(13)('iframe')
1113
+ , i = enumBugKeys.length
1114
+ , lt = '<'
1115
+ , gt = '>'
1116
+ , iframeDocument;
1117
+ iframe.style.display = 'none';
1118
+ __webpack_require__(46).appendChild(iframe);
1119
+ iframe.src = 'javascript:'; // eslint-disable-line no-script-url
1120
+ // createDict = iframe.contentWindow.Object;
1121
+ // html.removeChild(iframe);
1122
+ iframeDocument = iframe.contentWindow.document;
1123
+ iframeDocument.open();
1124
+ iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
1125
+ iframeDocument.close();
1126
+ createDict = iframeDocument.F;
1127
+ while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];
1128
+ return createDict();
1129
+ };
1130
+
1131
+ module.exports = Object.create || function create(O, Properties){
1132
+ var result;
1133
+ if(O !== null){
1134
+ Empty[PROTOTYPE] = anObject(O);
1135
+ result = new Empty;
1136
+ Empty[PROTOTYPE] = null;
1137
+ // add "__proto__" for Object.getPrototypeOf polyfill
1138
+ result[IE_PROTO] = O;
1139
+ } else result = createDict();
1140
+ return Properties === undefined ? result : dPs(result, Properties);
1141
+ };
1142
+
1143
+
1144
+ /***/ },
1145
+ /* 45 */
1146
+ /***/ function(module, exports, __webpack_require__) {
1147
+
1148
+ var dP = __webpack_require__(9)
1149
+ , anObject = __webpack_require__(10)
1150
+ , getKeys = __webpack_require__(28);
1151
+
1152
+ module.exports = __webpack_require__(4) ? Object.defineProperties : function defineProperties(O, Properties){
1153
+ anObject(O);
1154
+ var keys = getKeys(Properties)
1155
+ , length = keys.length
1156
+ , i = 0
1157
+ , P;
1158
+ while(length > i)dP.f(O, P = keys[i++], Properties[P]);
1159
+ return O;
1160
+ };
1161
+
1162
+ /***/ },
1163
+ /* 46 */
1164
+ /***/ function(module, exports, __webpack_require__) {
1165
+
1166
+ module.exports = __webpack_require__(2).document && document.documentElement;
1167
+
1168
+ /***/ },
1169
+ /* 47 */
1170
+ /***/ function(module, exports, __webpack_require__) {
1171
+
1172
+ // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
1173
+ var toIObject = __webpack_require__(30)
1174
+ , gOPN = __webpack_require__(48).f
1175
+ , toString = {}.toString;
1176
+
1177
+ var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
1178
+ ? Object.getOwnPropertyNames(window) : [];
1179
+
1180
+ var getWindowNames = function(it){
1181
+ try {
1182
+ return gOPN(it);
1183
+ } catch(e){
1184
+ return windowNames.slice();
1185
+ }
1186
+ };
1187
+
1188
+ module.exports.f = function getOwnPropertyNames(it){
1189
+ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
1190
+ };
1191
+
1192
+
1193
+ /***/ },
1194
+ /* 48 */
1195
+ /***/ function(module, exports, __webpack_require__) {
1196
+
1197
+ // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
1198
+ var $keys = __webpack_require__(29)
1199
+ , hiddenKeys = __webpack_require__(39).concat('length', 'prototype');
1200
+
1201
+ exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){
1202
+ return $keys(O, hiddenKeys);
1203
+ };
1204
+
1205
+ /***/ },
1206
+ /* 49 */
1207
+ /***/ function(module, exports, __webpack_require__) {
1208
+
1209
+ var pIE = __webpack_require__(42)
1210
+ , createDesc = __webpack_require__(15)
1211
+ , toIObject = __webpack_require__(30)
1212
+ , toPrimitive = __webpack_require__(14)
1213
+ , has = __webpack_require__(3)
1214
+ , IE8_DOM_DEFINE = __webpack_require__(12)
1215
+ , gOPD = Object.getOwnPropertyDescriptor;
1216
+
1217
+ exports.f = __webpack_require__(4) ? gOPD : function getOwnPropertyDescriptor(O, P){
1218
+ O = toIObject(O);
1219
+ P = toPrimitive(P, true);
1220
+ if(IE8_DOM_DEFINE)try {
1221
+ return gOPD(O, P);
1222
+ } catch(e){ /* empty */ }
1223
+ if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);
1224
+ };
1225
+
1226
+ /***/ },
1227
+ /* 50 */
1228
+ /***/ function(module, exports, __webpack_require__) {
1229
+
1230
+ var $export = __webpack_require__(6);
1231
+ // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
1232
+ $export($export.S + $export.F * !__webpack_require__(4), 'Object', {defineProperty: __webpack_require__(9).f});
1233
+
1234
+ /***/ },
1235
+ /* 51 */
1236
+ /***/ function(module, exports, __webpack_require__) {
1237
+
1238
+ var $export = __webpack_require__(6);
1239
+ // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)
1240
+ $export($export.S + $export.F * !__webpack_require__(4), 'Object', {defineProperties: __webpack_require__(45)});
1241
+
1242
+ /***/ },
1243
+ /* 52 */
1244
+ /***/ function(module, exports, __webpack_require__) {
1245
+
1246
+ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
1247
+ var toIObject = __webpack_require__(30)
1248
+ , $getOwnPropertyDescriptor = __webpack_require__(49).f;
1249
+
1250
+ __webpack_require__(53)('getOwnPropertyDescriptor', function(){
1251
+ return function getOwnPropertyDescriptor(it, key){
1252
+ return $getOwnPropertyDescriptor(toIObject(it), key);
1253
+ };
1254
+ });
1255
+
1256
+ /***/ },
1257
+ /* 53 */
1258
+ /***/ function(module, exports, __webpack_require__) {
1259
+
1260
+ // most Object methods by ES6 should accept primitives
1261
+ var $export = __webpack_require__(6)
1262
+ , core = __webpack_require__(7)
1263
+ , fails = __webpack_require__(5);
1264
+ module.exports = function(KEY, exec){
1265
+ var fn = (core.Object || {})[KEY] || Object[KEY]
1266
+ , exp = {};
1267
+ exp[KEY] = exec(fn);
1268
+ $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
1269
+ };
1270
+
1271
+ /***/ },
1272
+ /* 54 */
1273
+ /***/ function(module, exports, __webpack_require__) {
1274
+
1275
+ var $export = __webpack_require__(6)
1276
+ // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
1277
+ $export($export.S, 'Object', {create: __webpack_require__(44)});
1278
+
1279
+ /***/ },
1280
+ /* 55 */
1281
+ /***/ function(module, exports, __webpack_require__) {
1282
+
1283
+ // 19.1.2.9 Object.getPrototypeOf(O)
1284
+ var toObject = __webpack_require__(56)
1285
+ , $getPrototypeOf = __webpack_require__(57);
1286
+
1287
+ __webpack_require__(53)('getPrototypeOf', function(){
1288
+ return function getPrototypeOf(it){
1289
+ return $getPrototypeOf(toObject(it));
1290
+ };
1291
+ });
1292
+
1293
+ /***/ },
1294
+ /* 56 */
1295
+ /***/ function(module, exports, __webpack_require__) {
1296
+
1297
+ // 7.1.13 ToObject(argument)
1298
+ var defined = __webpack_require__(33);
1299
+ module.exports = function(it){
1300
+ return Object(defined(it));
1301
+ };
1302
+
1303
+ /***/ },
1304
+ /* 57 */
1305
+ /***/ function(module, exports, __webpack_require__) {
1306
+
1307
+ // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
1308
+ var has = __webpack_require__(3)
1309
+ , toObject = __webpack_require__(56)
1310
+ , IE_PROTO = __webpack_require__(38)('IE_PROTO')
1311
+ , ObjectProto = Object.prototype;
1312
+
1313
+ module.exports = Object.getPrototypeOf || function(O){
1314
+ O = toObject(O);
1315
+ if(has(O, IE_PROTO))return O[IE_PROTO];
1316
+ if(typeof O.constructor == 'function' && O instanceof O.constructor){
1317
+ return O.constructor.prototype;
1318
+ } return O instanceof Object ? ObjectProto : null;
1319
+ };
1320
+
1321
+ /***/ },
1322
+ /* 58 */
1323
+ /***/ function(module, exports, __webpack_require__) {
1324
+
1325
+ // 19.1.2.14 Object.keys(O)
1326
+ var toObject = __webpack_require__(56)
1327
+ , $keys = __webpack_require__(28);
1328
+
1329
+ __webpack_require__(53)('keys', function(){
1330
+ return function keys(it){
1331
+ return $keys(toObject(it));
1332
+ };
1333
+ });
1334
+
1335
+ /***/ },
1336
+ /* 59 */
1337
+ /***/ function(module, exports, __webpack_require__) {
1338
+
1339
+ // 19.1.2.7 Object.getOwnPropertyNames(O)
1340
+ __webpack_require__(53)('getOwnPropertyNames', function(){
1341
+ return __webpack_require__(47).f;
1342
+ });
1343
+
1344
+ /***/ },
1345
+ /* 60 */
1346
+ /***/ function(module, exports, __webpack_require__) {
1347
+
1348
+ // 19.1.2.5 Object.freeze(O)
1349
+ var isObject = __webpack_require__(11)
1350
+ , meta = __webpack_require__(20).onFreeze;
1351
+
1352
+ __webpack_require__(53)('freeze', function($freeze){
1353
+ return function freeze(it){
1354
+ return $freeze && isObject(it) ? $freeze(meta(it)) : it;
1355
+ };
1356
+ });
1357
+
1358
+ /***/ },
1359
+ /* 61 */
1360
+ /***/ function(module, exports, __webpack_require__) {
1361
+
1362
+ // 19.1.2.17 Object.seal(O)
1363
+ var isObject = __webpack_require__(11)
1364
+ , meta = __webpack_require__(20).onFreeze;
1365
+
1366
+ __webpack_require__(53)('seal', function($seal){
1367
+ return function seal(it){
1368
+ return $seal && isObject(it) ? $seal(meta(it)) : it;
1369
+ };
1370
+ });
1371
+
1372
+ /***/ },
1373
+ /* 62 */
1374
+ /***/ function(module, exports, __webpack_require__) {
1375
+
1376
+ // 19.1.2.15 Object.preventExtensions(O)
1377
+ var isObject = __webpack_require__(11)
1378
+ , meta = __webpack_require__(20).onFreeze;
1379
+
1380
+ __webpack_require__(53)('preventExtensions', function($preventExtensions){
1381
+ return function preventExtensions(it){
1382
+ return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;
1383
+ };
1384
+ });
1385
+
1386
+ /***/ },
1387
+ /* 63 */
1388
+ /***/ function(module, exports, __webpack_require__) {
1389
+
1390
+ // 19.1.2.12 Object.isFrozen(O)
1391
+ var isObject = __webpack_require__(11);
1392
+
1393
+ __webpack_require__(53)('isFrozen', function($isFrozen){
1394
+ return function isFrozen(it){
1395
+ return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
1396
+ };
1397
+ });
1398
+
1399
+ /***/ },
1400
+ /* 64 */
1401
+ /***/ function(module, exports, __webpack_require__) {
1402
+
1403
+ // 19.1.2.13 Object.isSealed(O)
1404
+ var isObject = __webpack_require__(11);
1405
+
1406
+ __webpack_require__(53)('isSealed', function($isSealed){
1407
+ return function isSealed(it){
1408
+ return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
1409
+ };
1410
+ });
1411
+
1412
+ /***/ },
1413
+ /* 65 */
1414
+ /***/ function(module, exports, __webpack_require__) {
1415
+
1416
+ // 19.1.2.11 Object.isExtensible(O)
1417
+ var isObject = __webpack_require__(11);
1418
+
1419
+ __webpack_require__(53)('isExtensible', function($isExtensible){
1420
+ return function isExtensible(it){
1421
+ return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
1422
+ };
1423
+ });
1424
+
1425
+ /***/ },
1426
+ /* 66 */
1427
+ /***/ function(module, exports, __webpack_require__) {
1428
+
1429
+ // 19.1.3.1 Object.assign(target, source)
1430
+ var $export = __webpack_require__(6);
1431
+
1432
+ $export($export.S + $export.F, 'Object', {assign: __webpack_require__(67)});
1433
+
1434
+ /***/ },
1435
+ /* 67 */
1436
+ /***/ function(module, exports, __webpack_require__) {
1437
+
1438
+ 'use strict';
1439
+ // 19.1.2.1 Object.assign(target, source, ...)
1440
+ var getKeys = __webpack_require__(28)
1441
+ , gOPS = __webpack_require__(41)
1442
+ , pIE = __webpack_require__(42)
1443
+ , toObject = __webpack_require__(56)
1444
+ , IObject = __webpack_require__(31)
1445
+ , $assign = Object.assign;
1446
+
1447
+ // should work with symbols and should have deterministic property order (V8 bug)
1448
+ module.exports = !$assign || __webpack_require__(5)(function(){
1449
+ var A = {}
1450
+ , B = {}
1451
+ , S = Symbol()
1452
+ , K = 'abcdefghijklmnopqrst';
1453
+ A[S] = 7;
1454
+ K.split('').forEach(function(k){ B[k] = k; });
1455
+ return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
1456
+ }) ? function assign(target, source){ // eslint-disable-line no-unused-vars
1457
+ var T = toObject(target)
1458
+ , aLen = arguments.length
1459
+ , index = 1
1460
+ , getSymbols = gOPS.f
1461
+ , isEnum = pIE.f;
1462
+ while(aLen > index){
1463
+ var S = IObject(arguments[index++])
1464
+ , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
1465
+ , length = keys.length
1466
+ , j = 0
1467
+ , key;
1468
+ while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
1469
+ } return T;
1470
+ } : $assign;
1471
+
1472
+ /***/ },
1473
+ /* 68 */
1474
+ /***/ function(module, exports, __webpack_require__) {
1475
+
1476
+ // 19.1.3.10 Object.is(value1, value2)
1477
+ var $export = __webpack_require__(6);
1478
+ $export($export.S, 'Object', {is: __webpack_require__(69)});
1479
+
1480
+ /***/ },
1481
+ /* 69 */
1482
+ /***/ function(module, exports) {
1483
+
1484
+ // 7.2.9 SameValue(x, y)
1485
+ module.exports = Object.is || function is(x, y){
1486
+ return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
1487
+ };
1488
+
1489
+ /***/ },
1490
+ /* 70 */
1491
+ /***/ function(module, exports, __webpack_require__) {
1492
+
1493
+ // 19.1.3.19 Object.setPrototypeOf(O, proto)
1494
+ var $export = __webpack_require__(6);
1495
+ $export($export.S, 'Object', {setPrototypeOf: __webpack_require__(71).set});
1496
+
1497
+ /***/ },
1498
+ /* 71 */
1499
+ /***/ function(module, exports, __webpack_require__) {
1500
+
1501
+ // Works with __proto__ only. Old v8 can't work with null proto objects.
1502
+ /* eslint-disable no-proto */
1503
+ var isObject = __webpack_require__(11)
1504
+ , anObject = __webpack_require__(10);
1505
+ var check = function(O, proto){
1506
+ anObject(O);
1507
+ if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!");
1508
+ };
1509
+ module.exports = {
1510
+ set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
1511
+ function(test, buggy, set){
1512
+ try {
1513
+ set = __webpack_require__(18)(Function.call, __webpack_require__(49).f(Object.prototype, '__proto__').set, 2);
1514
+ set(test, []);
1515
+ buggy = !(test instanceof Array);
1516
+ } catch(e){ buggy = true; }
1517
+ return function setPrototypeOf(O, proto){
1518
+ check(O, proto);
1519
+ if(buggy)O.__proto__ = proto;
1520
+ else set(O, proto);
1521
+ return O;
1522
+ };
1523
+ }({}, false) : undefined),
1524
+ check: check
1525
+ };
1526
+
1527
+ /***/ },
1528
+ /* 72 */
1529
+ /***/ function(module, exports, __webpack_require__) {
1530
+
1531
+ 'use strict';
1532
+ // 19.1.3.6 Object.prototype.toString()
1533
+ var classof = __webpack_require__(73)
1534
+ , test = {};
1535
+ test[__webpack_require__(23)('toStringTag')] = 'z';
1536
+ if(test + '' != '[object z]'){
1537
+ __webpack_require__(16)(Object.prototype, 'toString', function toString(){
1538
+ return '[object ' + classof(this) + ']';
1539
+ }, true);
1540
+ }
1541
+
1542
+ /***/ },
1543
+ /* 73 */
1544
+ /***/ function(module, exports, __webpack_require__) {
1545
+
1546
+ // getting tag from 19.1.3.6 Object.prototype.toString()
1547
+ var cof = __webpack_require__(32)
1548
+ , TAG = __webpack_require__(23)('toStringTag')
1549
+ // ES3 wrong here
1550
+ , ARG = cof(function(){ return arguments; }()) == 'Arguments';
1551
+
1552
+ // fallback for IE11 Script Access Denied error
1553
+ var tryGet = function(it, key){
1554
+ try {
1555
+ return it[key];
1556
+ } catch(e){ /* empty */ }
1557
+ };
1558
+
1559
+ module.exports = function(it){
1560
+ var O, T, B;
1561
+ return it === undefined ? 'Undefined' : it === null ? 'Null'
1562
+ // @@toStringTag case
1563
+ : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
1564
+ // builtinTag case
1565
+ : ARG ? cof(O)
1566
+ // ES3 arguments fallback
1567
+ : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
1568
+ };
1569
+
1570
+ /***/ },
1571
+ /* 74 */
1572
+ /***/ function(module, exports, __webpack_require__) {
1573
+
1574
+ // 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)
1575
+ var $export = __webpack_require__(6);
1576
+
1577
+ $export($export.P, 'Function', {bind: __webpack_require__(75)});
1578
+
1579
+ /***/ },
1580
+ /* 75 */
1581
+ /***/ function(module, exports, __webpack_require__) {
1582
+
1583
+ 'use strict';
1584
+ var aFunction = __webpack_require__(19)
1585
+ , isObject = __webpack_require__(11)
1586
+ , invoke = __webpack_require__(76)
1587
+ , arraySlice = [].slice
1588
+ , factories = {};
1589
+
1590
+ var construct = function(F, len, args){
1591
+ if(!(len in factories)){
1592
+ for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';
1593
+ factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');
1594
+ } return factories[len](F, args);
1595
+ };
1596
+
1597
+ module.exports = Function.bind || function bind(that /*, args... */){
1598
+ var fn = aFunction(this)
1599
+ , partArgs = arraySlice.call(arguments, 1);
1600
+ var bound = function(/* args... */){
1601
+ var args = partArgs.concat(arraySlice.call(arguments));
1602
+ return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
1603
+ };
1604
+ if(isObject(fn.prototype))bound.prototype = fn.prototype;
1605
+ return bound;
1606
+ };
1607
+
1608
+ /***/ },
1609
+ /* 76 */
1610
+ /***/ function(module, exports) {
1611
+
1612
+ // fast apply, http://jsperf.lnkit.com/fast-apply/5
1613
+ module.exports = function(fn, args, that){
1614
+ var un = that === undefined;
1615
+ switch(args.length){
1616
+ case 0: return un ? fn()
1617
+ : fn.call(that);
1618
+ case 1: return un ? fn(args[0])
1619
+ : fn.call(that, args[0]);
1620
+ case 2: return un ? fn(args[0], args[1])
1621
+ : fn.call(that, args[0], args[1]);
1622
+ case 3: return un ? fn(args[0], args[1], args[2])
1623
+ : fn.call(that, args[0], args[1], args[2]);
1624
+ case 4: return un ? fn(args[0], args[1], args[2], args[3])
1625
+ : fn.call(that, args[0], args[1], args[2], args[3]);
1626
+ } return fn.apply(that, args);
1627
+ };
1628
+
1629
+ /***/ },
1630
+ /* 77 */
1631
+ /***/ function(module, exports, __webpack_require__) {
1632
+
1633
+ var dP = __webpack_require__(9).f
1634
+ , createDesc = __webpack_require__(15)
1635
+ , has = __webpack_require__(3)
1636
+ , FProto = Function.prototype
1637
+ , nameRE = /^\s*function ([^ (]*)/
1638
+ , NAME = 'name';
1639
+
1640
+ var isExtensible = Object.isExtensible || function(){
1641
+ return true;
1642
+ };
1643
+
1644
+ // 19.2.4.2 name
1645
+ NAME in FProto || __webpack_require__(4) && dP(FProto, NAME, {
1646
+ configurable: true,
1647
+ get: function(){
1648
+ try {
1649
+ var that = this
1650
+ , name = ('' + that).match(nameRE)[1];
1651
+ has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name));
1652
+ return name;
1653
+ } catch(e){
1654
+ return '';
1655
+ }
1656
+ }
1657
+ });
1658
+
1659
+ /***/ },
1660
+ /* 78 */
1661
+ /***/ function(module, exports, __webpack_require__) {
1662
+
1663
+ 'use strict';
1664
+ var isObject = __webpack_require__(11)
1665
+ , getPrototypeOf = __webpack_require__(57)
1666
+ , HAS_INSTANCE = __webpack_require__(23)('hasInstance')
1667
+ , FunctionProto = Function.prototype;
1668
+ // 19.2.3.6 Function.prototype[@@hasInstance](V)
1669
+ if(!(HAS_INSTANCE in FunctionProto))__webpack_require__(9).f(FunctionProto, HAS_INSTANCE, {value: function(O){
1670
+ if(typeof this != 'function' || !isObject(O))return false;
1671
+ if(!isObject(this.prototype))return O instanceof this;
1672
+ // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:
1673
+ while(O = getPrototypeOf(O))if(this.prototype === O)return true;
1674
+ return false;
1675
+ }});
1676
+
1677
+ /***/ },
1678
+ /* 79 */
1679
+ /***/ function(module, exports, __webpack_require__) {
1680
+
1681
+ 'use strict';
1682
+ var global = __webpack_require__(2)
1683
+ , has = __webpack_require__(3)
1684
+ , cof = __webpack_require__(32)
1685
+ , inheritIfRequired = __webpack_require__(80)
1686
+ , toPrimitive = __webpack_require__(14)
1687
+ , fails = __webpack_require__(5)
1688
+ , gOPN = __webpack_require__(48).f
1689
+ , gOPD = __webpack_require__(49).f
1690
+ , dP = __webpack_require__(9).f
1691
+ , $trim = __webpack_require__(81).trim
1692
+ , NUMBER = 'Number'
1693
+ , $Number = global[NUMBER]
1694
+ , Base = $Number
1695
+ , proto = $Number.prototype
1696
+ // Opera ~12 has broken Object#toString
1697
+ , BROKEN_COF = cof(__webpack_require__(44)(proto)) == NUMBER
1698
+ , TRIM = 'trim' in String.prototype;
1699
+
1700
+ // 7.1.3 ToNumber(argument)
1701
+ var toNumber = function(argument){
1702
+ var it = toPrimitive(argument, false);
1703
+ if(typeof it == 'string' && it.length > 2){
1704
+ it = TRIM ? it.trim() : $trim(it, 3);
1705
+ var first = it.charCodeAt(0)
1706
+ , third, radix, maxCode;
1707
+ if(first === 43 || first === 45){
1708
+ third = it.charCodeAt(2);
1709
+ if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix
1710
+ } else if(first === 48){
1711
+ switch(it.charCodeAt(1)){
1712
+ case 66 : case 98 : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i
1713
+ case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i
1714
+ default : return +it;
1715
+ }
1716
+ for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){
1717
+ code = digits.charCodeAt(i);
1718
+ // parseInt parses a string to a first unavailable symbol
1719
+ // but ToNumber should return NaN if a string contains unavailable symbols
1720
+ if(code < 48 || code > maxCode)return NaN;
1721
+ } return parseInt(digits, radix);
1722
+ }
1723
+ } return +it;
1724
+ };
1725
+
1726
+ if(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){
1727
+ $Number = function Number(value){
1728
+ var it = arguments.length < 1 ? 0 : value
1729
+ , that = this;
1730
+ return that instanceof $Number
1731
+ // check on 1..constructor(foo) case
1732
+ && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)
1733
+ ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);
1734
+ };
1735
+ for(var keys = __webpack_require__(4) ? gOPN(Base) : (
1736
+ // ES3:
1737
+ 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
1738
+ // ES6 (in case, if modules with ES6 Number statics required before):
1739
+ 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
1740
+ 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'
1741
+ ).split(','), j = 0, key; keys.length > j; j++){
1742
+ if(has(Base, key = keys[j]) && !has($Number, key)){
1743
+ dP($Number, key, gOPD(Base, key));
1744
+ }
1745
+ }
1746
+ $Number.prototype = proto;
1747
+ proto.constructor = $Number;
1748
+ __webpack_require__(16)(global, NUMBER, $Number);
1749
+ }
1750
+
1751
+ /***/ },
1752
+ /* 80 */
1753
+ /***/ function(module, exports, __webpack_require__) {
1754
+
1755
+ var isObject = __webpack_require__(11)
1756
+ , setPrototypeOf = __webpack_require__(71).set;
1757
+ module.exports = function(that, target, C){
1758
+ var P, S = target.constructor;
1759
+ if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){
1760
+ setPrototypeOf(that, P);
1761
+ } return that;
1762
+ };
1763
+
1764
+ /***/ },
1765
+ /* 81 */
1766
+ /***/ function(module, exports, __webpack_require__) {
1767
+
1768
+ var $export = __webpack_require__(6)
1769
+ , defined = __webpack_require__(33)
1770
+ , fails = __webpack_require__(5)
1771
+ , spaces = __webpack_require__(82)
1772
+ , space = '[' + spaces + ']'
1773
+ , non = '\u200b\u0085'
1774
+ , ltrim = RegExp('^' + space + space + '*')
1775
+ , rtrim = RegExp(space + space + '*$');
1776
+
1777
+ var exporter = function(KEY, exec, ALIAS){
1778
+ var exp = {};
1779
+ var FORCE = fails(function(){
1780
+ return !!spaces[KEY]() || non[KEY]() != non;
1781
+ });
1782
+ var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
1783
+ if(ALIAS)exp[ALIAS] = fn;
1784
+ $export($export.P + $export.F * FORCE, 'String', exp);
1785
+ };
1786
+
1787
+ // 1 -> String#trimLeft
1788
+ // 2 -> String#trimRight
1789
+ // 3 -> String#trim
1790
+ var trim = exporter.trim = function(string, TYPE){
1791
+ string = String(defined(string));
1792
+ if(TYPE & 1)string = string.replace(ltrim, '');
1793
+ if(TYPE & 2)string = string.replace(rtrim, '');
1794
+ return string;
1795
+ };
1796
+
1797
+ module.exports = exporter;
1798
+
1799
+ /***/ },
1800
+ /* 82 */
1801
+ /***/ function(module, exports) {
1802
+
1803
+ module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
1804
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
1805
+
1806
+ /***/ },
1807
+ /* 83 */
1808
+ /***/ function(module, exports, __webpack_require__) {
1809
+
1810
+ 'use strict';
1811
+ var $export = __webpack_require__(6)
1812
+ , toInteger = __webpack_require__(36)
1813
+ , aNumberValue = __webpack_require__(84)
1814
+ , repeat = __webpack_require__(85)
1815
+ , $toFixed = 1..toFixed
1816
+ , floor = Math.floor
1817
+ , data = [0, 0, 0, 0, 0, 0]
1818
+ , ERROR = 'Number.toFixed: incorrect invocation!'
1819
+ , ZERO = '0';
1820
+
1821
+ var multiply = function(n, c){
1822
+ var i = -1
1823
+ , c2 = c;
1824
+ while(++i < 6){
1825
+ c2 += n * data[i];
1826
+ data[i] = c2 % 1e7;
1827
+ c2 = floor(c2 / 1e7);
1828
+ }
1829
+ };
1830
+ var divide = function(n){
1831
+ var i = 6
1832
+ , c = 0;
1833
+ while(--i >= 0){
1834
+ c += data[i];
1835
+ data[i] = floor(c / n);
1836
+ c = (c % n) * 1e7;
1837
+ }
1838
+ };
1839
+ var numToString = function(){
1840
+ var i = 6
1841
+ , s = '';
1842
+ while(--i >= 0){
1843
+ if(s !== '' || i === 0 || data[i] !== 0){
1844
+ var t = String(data[i]);
1845
+ s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;
1846
+ }
1847
+ } return s;
1848
+ };
1849
+ var pow = function(x, n, acc){
1850
+ return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
1851
+ };
1852
+ var log = function(x){
1853
+ var n = 0
1854
+ , x2 = x;
1855
+ while(x2 >= 4096){
1856
+ n += 12;
1857
+ x2 /= 4096;
1858
+ }
1859
+ while(x2 >= 2){
1860
+ n += 1;
1861
+ x2 /= 2;
1862
+ } return n;
1863
+ };
1864
+
1865
+ $export($export.P + $export.F * (!!$toFixed && (
1866
+ 0.00008.toFixed(3) !== '0.000' ||
1867
+ 0.9.toFixed(0) !== '1' ||
1868
+ 1.255.toFixed(2) !== '1.25' ||
1869
+ 1000000000000000128..toFixed(0) !== '1000000000000000128'
1870
+ ) || !__webpack_require__(5)(function(){
1871
+ // V8 ~ Android 4.3-
1872
+ $toFixed.call({});
1873
+ })), 'Number', {
1874
+ toFixed: function toFixed(fractionDigits){
1875
+ var x = aNumberValue(this, ERROR)
1876
+ , f = toInteger(fractionDigits)
1877
+ , s = ''
1878
+ , m = ZERO
1879
+ , e, z, j, k;
1880
+ if(f < 0 || f > 20)throw RangeError(ERROR);
1881
+ if(x != x)return 'NaN';
1882
+ if(x <= -1e21 || x >= 1e21)return String(x);
1883
+ if(x < 0){
1884
+ s = '-';
1885
+ x = -x;
1886
+ }
1887
+ if(x > 1e-21){
1888
+ e = log(x * pow(2, 69, 1)) - 69;
1889
+ z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);
1890
+ z *= 0x10000000000000;
1891
+ e = 52 - e;
1892
+ if(e > 0){
1893
+ multiply(0, z);
1894
+ j = f;
1895
+ while(j >= 7){
1896
+ multiply(1e7, 0);
1897
+ j -= 7;
1898
+ }
1899
+ multiply(pow(10, j, 1), 0);
1900
+ j = e - 1;
1901
+ while(j >= 23){
1902
+ divide(1 << 23);
1903
+ j -= 23;
1904
+ }
1905
+ divide(1 << j);
1906
+ multiply(1, 1);
1907
+ divide(2);
1908
+ m = numToString();
1909
+ } else {
1910
+ multiply(0, z);
1911
+ multiply(1 << -e, 0);
1912
+ m = numToString() + repeat.call(ZERO, f);
1913
+ }
1914
+ }
1915
+ if(f > 0){
1916
+ k = m.length;
1917
+ m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));
1918
+ } else {
1919
+ m = s + m;
1920
+ } return m;
1921
+ }
1922
+ });
1923
+
1924
+ /***/ },
1925
+ /* 84 */
1926
+ /***/ function(module, exports, __webpack_require__) {
1927
+
1928
+ var cof = __webpack_require__(32);
1929
+ module.exports = function(it, msg){
1930
+ if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg);
1931
+ return +it;
1932
+ };
1933
+
1934
+ /***/ },
1935
+ /* 85 */
1936
+ /***/ function(module, exports, __webpack_require__) {
1937
+
1938
+ 'use strict';
1939
+ var toInteger = __webpack_require__(36)
1940
+ , defined = __webpack_require__(33);
1941
+
1942
+ module.exports = function repeat(count){
1943
+ var str = String(defined(this))
1944
+ , res = ''
1945
+ , n = toInteger(count);
1946
+ if(n < 0 || n == Infinity)throw RangeError("Count can't be negative");
1947
+ for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;
1948
+ return res;
1949
+ };
1950
+
1951
+ /***/ },
1952
+ /* 86 */
1953
+ /***/ function(module, exports, __webpack_require__) {
1954
+
1955
+ 'use strict';
1956
+ var $export = __webpack_require__(6)
1957
+ , $fails = __webpack_require__(5)
1958
+ , aNumberValue = __webpack_require__(84)
1959
+ , $toPrecision = 1..toPrecision;
1960
+
1961
+ $export($export.P + $export.F * ($fails(function(){
1962
+ // IE7-
1963
+ return $toPrecision.call(1, undefined) !== '1';
1964
+ }) || !$fails(function(){
1965
+ // V8 ~ Android 4.3-
1966
+ $toPrecision.call({});
1967
+ })), 'Number', {
1968
+ toPrecision: function toPrecision(precision){
1969
+ var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');
1970
+ return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);
1971
+ }
1972
+ });
1973
+
1974
+ /***/ },
1975
+ /* 87 */
1976
+ /***/ function(module, exports, __webpack_require__) {
1977
+
1978
+ // 20.1.2.1 Number.EPSILON
1979
+ var $export = __webpack_require__(6);
1980
+
1981
+ $export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});
1982
+
1983
+ /***/ },
1984
+ /* 88 */
1985
+ /***/ function(module, exports, __webpack_require__) {
1986
+
1987
+ // 20.1.2.2 Number.isFinite(number)
1988
+ var $export = __webpack_require__(6)
1989
+ , _isFinite = __webpack_require__(2).isFinite;
1990
+
1991
+ $export($export.S, 'Number', {
1992
+ isFinite: function isFinite(it){
1993
+ return typeof it == 'number' && _isFinite(it);
1994
+ }
1995
+ });
1996
+
1997
+ /***/ },
1998
+ /* 89 */
1999
+ /***/ function(module, exports, __webpack_require__) {
2000
+
2001
+ // 20.1.2.3 Number.isInteger(number)
2002
+ var $export = __webpack_require__(6);
2003
+
2004
+ $export($export.S, 'Number', {isInteger: __webpack_require__(90)});
2005
+
2006
+ /***/ },
2007
+ /* 90 */
2008
+ /***/ function(module, exports, __webpack_require__) {
2009
+
2010
+ // 20.1.2.3 Number.isInteger(number)
2011
+ var isObject = __webpack_require__(11)
2012
+ , floor = Math.floor;
2013
+ module.exports = function isInteger(it){
2014
+ return !isObject(it) && isFinite(it) && floor(it) === it;
2015
+ };
2016
+
2017
+ /***/ },
2018
+ /* 91 */
2019
+ /***/ function(module, exports, __webpack_require__) {
2020
+
2021
+ // 20.1.2.4 Number.isNaN(number)
2022
+ var $export = __webpack_require__(6);
2023
+
2024
+ $export($export.S, 'Number', {
2025
+ isNaN: function isNaN(number){
2026
+ return number != number;
2027
+ }
2028
+ });
2029
+
2030
+ /***/ },
2031
+ /* 92 */
2032
+ /***/ function(module, exports, __webpack_require__) {
2033
+
2034
+ // 20.1.2.5 Number.isSafeInteger(number)
2035
+ var $export = __webpack_require__(6)
2036
+ , isInteger = __webpack_require__(90)
2037
+ , abs = Math.abs;
2038
+
2039
+ $export($export.S, 'Number', {
2040
+ isSafeInteger: function isSafeInteger(number){
2041
+ return isInteger(number) && abs(number) <= 0x1fffffffffffff;
2042
+ }
2043
+ });
2044
+
2045
+ /***/ },
2046
+ /* 93 */
2047
+ /***/ function(module, exports, __webpack_require__) {
2048
+
2049
+ // 20.1.2.6 Number.MAX_SAFE_INTEGER
2050
+ var $export = __webpack_require__(6);
2051
+
2052
+ $export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});
2053
+
2054
+ /***/ },
2055
+ /* 94 */
2056
+ /***/ function(module, exports, __webpack_require__) {
2057
+
2058
+ // 20.1.2.10 Number.MIN_SAFE_INTEGER
2059
+ var $export = __webpack_require__(6);
2060
+
2061
+ $export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});
2062
+
2063
+ /***/ },
2064
+ /* 95 */
2065
+ /***/ function(module, exports, __webpack_require__) {
2066
+
2067
+ var $export = __webpack_require__(6)
2068
+ , $parseFloat = __webpack_require__(96);
2069
+ // 20.1.2.12 Number.parseFloat(string)
2070
+ $export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat});
2071
+
2072
+ /***/ },
2073
+ /* 96 */
2074
+ /***/ function(module, exports, __webpack_require__) {
2075
+
2076
+ var $parseFloat = __webpack_require__(2).parseFloat
2077
+ , $trim = __webpack_require__(81).trim;
2078
+
2079
+ module.exports = 1 / $parseFloat(__webpack_require__(82) + '-0') !== -Infinity ? function parseFloat(str){
2080
+ var string = $trim(String(str), 3)
2081
+ , result = $parseFloat(string);
2082
+ return result === 0 && string.charAt(0) == '-' ? -0 : result;
2083
+ } : $parseFloat;
2084
+
2085
+ /***/ },
2086
+ /* 97 */
2087
+ /***/ function(module, exports, __webpack_require__) {
2088
+
2089
+ var $export = __webpack_require__(6)
2090
+ , $parseInt = __webpack_require__(98);
2091
+ // 20.1.2.13 Number.parseInt(string, radix)
2092
+ $export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt});
2093
+
2094
+ /***/ },
2095
+ /* 98 */
2096
+ /***/ function(module, exports, __webpack_require__) {
2097
+
2098
+ var $parseInt = __webpack_require__(2).parseInt
2099
+ , $trim = __webpack_require__(81).trim
2100
+ , ws = __webpack_require__(82)
2101
+ , hex = /^[\-+]?0[xX]/;
2102
+
2103
+ module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){
2104
+ var string = $trim(String(str), 3);
2105
+ return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));
2106
+ } : $parseInt;
2107
+
2108
+ /***/ },
2109
+ /* 99 */
2110
+ /***/ function(module, exports, __webpack_require__) {
2111
+
2112
+ var $export = __webpack_require__(6)
2113
+ , $parseInt = __webpack_require__(98);
2114
+ // 18.2.5 parseInt(string, radix)
2115
+ $export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt});
2116
+
2117
+ /***/ },
2118
+ /* 100 */
2119
+ /***/ function(module, exports, __webpack_require__) {
2120
+
2121
+ var $export = __webpack_require__(6)
2122
+ , $parseFloat = __webpack_require__(96);
2123
+ // 18.2.4 parseFloat(string)
2124
+ $export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat});
2125
+
2126
+ /***/ },
2127
+ /* 101 */
2128
+ /***/ function(module, exports, __webpack_require__) {
2129
+
2130
+ // 20.2.2.3 Math.acosh(x)
2131
+ var $export = __webpack_require__(6)
2132
+ , log1p = __webpack_require__(102)
2133
+ , sqrt = Math.sqrt
2134
+ , $acosh = Math.acosh;
2135
+
2136
+ $export($export.S + $export.F * !($acosh
2137
+ // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
2138
+ && Math.floor($acosh(Number.MAX_VALUE)) == 710
2139
+ // Tor Browser bug: Math.acosh(Infinity) -> NaN
2140
+ && $acosh(Infinity) == Infinity
2141
+ ), 'Math', {
2142
+ acosh: function acosh(x){
2143
+ return (x = +x) < 1 ? NaN : x > 94906265.62425156
2144
+ ? Math.log(x) + Math.LN2
2145
+ : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
2146
+ }
2147
+ });
2148
+
2149
+ /***/ },
2150
+ /* 102 */
2151
+ /***/ function(module, exports) {
2152
+
2153
+ // 20.2.2.20 Math.log1p(x)
2154
+ module.exports = Math.log1p || function log1p(x){
2155
+ return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
2156
+ };
2157
+
2158
+ /***/ },
2159
+ /* 103 */
2160
+ /***/ function(module, exports, __webpack_require__) {
2161
+
2162
+ // 20.2.2.5 Math.asinh(x)
2163
+ var $export = __webpack_require__(6)
2164
+ , $asinh = Math.asinh;
2165
+
2166
+ function asinh(x){
2167
+ return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
2168
+ }
2169
+
2170
+ // Tor Browser bug: Math.asinh(0) -> -0
2171
+ $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});
2172
+
2173
+ /***/ },
2174
+ /* 104 */
2175
+ /***/ function(module, exports, __webpack_require__) {
2176
+
2177
+ // 20.2.2.7 Math.atanh(x)
2178
+ var $export = __webpack_require__(6)
2179
+ , $atanh = Math.atanh;
2180
+
2181
+ // Tor Browser bug: Math.atanh(-0) -> 0
2182
+ $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
2183
+ atanh: function atanh(x){
2184
+ return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
2185
+ }
2186
+ });
2187
+
2188
+ /***/ },
2189
+ /* 105 */
2190
+ /***/ function(module, exports, __webpack_require__) {
2191
+
2192
+ // 20.2.2.9 Math.cbrt(x)
2193
+ var $export = __webpack_require__(6)
2194
+ , sign = __webpack_require__(106);
2195
+
2196
+ $export($export.S, 'Math', {
2197
+ cbrt: function cbrt(x){
2198
+ return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
2199
+ }
2200
+ });
2201
+
2202
+ /***/ },
2203
+ /* 106 */
2204
+ /***/ function(module, exports) {
2205
+
2206
+ // 20.2.2.28 Math.sign(x)
2207
+ module.exports = Math.sign || function sign(x){
2208
+ return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
2209
+ };
2210
+
2211
+ /***/ },
2212
+ /* 107 */
2213
+ /***/ function(module, exports, __webpack_require__) {
2214
+
2215
+ // 20.2.2.11 Math.clz32(x)
2216
+ var $export = __webpack_require__(6);
2217
+
2218
+ $export($export.S, 'Math', {
2219
+ clz32: function clz32(x){
2220
+ return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
2221
+ }
2222
+ });
2223
+
2224
+ /***/ },
2225
+ /* 108 */
2226
+ /***/ function(module, exports, __webpack_require__) {
2227
+
2228
+ // 20.2.2.12 Math.cosh(x)
2229
+ var $export = __webpack_require__(6)
2230
+ , exp = Math.exp;
2231
+
2232
+ $export($export.S, 'Math', {
2233
+ cosh: function cosh(x){
2234
+ return (exp(x = +x) + exp(-x)) / 2;
2235
+ }
2236
+ });
2237
+
2238
+ /***/ },
2239
+ /* 109 */
2240
+ /***/ function(module, exports, __webpack_require__) {
2241
+
2242
+ // 20.2.2.14 Math.expm1(x)
2243
+ var $export = __webpack_require__(6)
2244
+ , $expm1 = __webpack_require__(110);
2245
+
2246
+ $export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});
2247
+
2248
+ /***/ },
2249
+ /* 110 */
2250
+ /***/ function(module, exports) {
2251
+
2252
+ // 20.2.2.14 Math.expm1(x)
2253
+ var $expm1 = Math.expm1;
2254
+ module.exports = (!$expm1
2255
+ // Old FF bug
2256
+ || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168
2257
+ // Tor Browser bug
2258
+ || $expm1(-2e-17) != -2e-17
2259
+ ) ? function expm1(x){
2260
+ return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
2261
+ } : $expm1;
2262
+
2263
+ /***/ },
2264
+ /* 111 */
2265
+ /***/ function(module, exports, __webpack_require__) {
2266
+
2267
+ // 20.2.2.16 Math.fround(x)
2268
+ var $export = __webpack_require__(6)
2269
+ , sign = __webpack_require__(106)
2270
+ , pow = Math.pow
2271
+ , EPSILON = pow(2, -52)
2272
+ , EPSILON32 = pow(2, -23)
2273
+ , MAX32 = pow(2, 127) * (2 - EPSILON32)
2274
+ , MIN32 = pow(2, -126);
2275
+
2276
+ var roundTiesToEven = function(n){
2277
+ return n + 1 / EPSILON - 1 / EPSILON;
2278
+ };
2279
+
2280
+
2281
+ $export($export.S, 'Math', {
2282
+ fround: function fround(x){
2283
+ var $abs = Math.abs(x)
2284
+ , $sign = sign(x)
2285
+ , a, result;
2286
+ if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
2287
+ a = (1 + EPSILON32 / EPSILON) * $abs;
2288
+ result = a - (a - $abs);
2289
+ if(result > MAX32 || result != result)return $sign * Infinity;
2290
+ return $sign * result;
2291
+ }
2292
+ });
2293
+
2294
+ /***/ },
2295
+ /* 112 */
2296
+ /***/ function(module, exports, __webpack_require__) {
2297
+
2298
+ // 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
2299
+ var $export = __webpack_require__(6)
2300
+ , abs = Math.abs;
2301
+
2302
+ $export($export.S, 'Math', {
2303
+ hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars
2304
+ var sum = 0
2305
+ , i = 0
2306
+ , aLen = arguments.length
2307
+ , larg = 0
2308
+ , arg, div;
2309
+ while(i < aLen){
2310
+ arg = abs(arguments[i++]);
2311
+ if(larg < arg){
2312
+ div = larg / arg;
2313
+ sum = sum * div * div + 1;
2314
+ larg = arg;
2315
+ } else if(arg > 0){
2316
+ div = arg / larg;
2317
+ sum += div * div;
2318
+ } else sum += arg;
2319
+ }
2320
+ return larg === Infinity ? Infinity : larg * Math.sqrt(sum);
2321
+ }
2322
+ });
2323
+
2324
+ /***/ },
2325
+ /* 113 */
2326
+ /***/ function(module, exports, __webpack_require__) {
2327
+
2328
+ // 20.2.2.18 Math.imul(x, y)
2329
+ var $export = __webpack_require__(6)
2330
+ , $imul = Math.imul;
2331
+
2332
+ // some WebKit versions fails with big numbers, some has wrong arity
2333
+ $export($export.S + $export.F * __webpack_require__(5)(function(){
2334
+ return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
2335
+ }), 'Math', {
2336
+ imul: function imul(x, y){
2337
+ var UINT16 = 0xffff
2338
+ , xn = +x
2339
+ , yn = +y
2340
+ , xl = UINT16 & xn
2341
+ , yl = UINT16 & yn;
2342
+ return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
2343
+ }
2344
+ });
2345
+
2346
+ /***/ },
2347
+ /* 114 */
2348
+ /***/ function(module, exports, __webpack_require__) {
2349
+
2350
+ // 20.2.2.21 Math.log10(x)
2351
+ var $export = __webpack_require__(6);
2352
+
2353
+ $export($export.S, 'Math', {
2354
+ log10: function log10(x){
2355
+ return Math.log(x) / Math.LN10;
2356
+ }
2357
+ });
2358
+
2359
+ /***/ },
2360
+ /* 115 */
2361
+ /***/ function(module, exports, __webpack_require__) {
2362
+
2363
+ // 20.2.2.20 Math.log1p(x)
2364
+ var $export = __webpack_require__(6);
2365
+
2366
+ $export($export.S, 'Math', {log1p: __webpack_require__(102)});
2367
+
2368
+ /***/ },
2369
+ /* 116 */
2370
+ /***/ function(module, exports, __webpack_require__) {
2371
+
2372
+ // 20.2.2.22 Math.log2(x)
2373
+ var $export = __webpack_require__(6);
2374
+
2375
+ $export($export.S, 'Math', {
2376
+ log2: function log2(x){
2377
+ return Math.log(x) / Math.LN2;
2378
+ }
2379
+ });
2380
+
2381
+ /***/ },
2382
+ /* 117 */
2383
+ /***/ function(module, exports, __webpack_require__) {
2384
+
2385
+ // 20.2.2.28 Math.sign(x)
2386
+ var $export = __webpack_require__(6);
2387
+
2388
+ $export($export.S, 'Math', {sign: __webpack_require__(106)});
2389
+
2390
+ /***/ },
2391
+ /* 118 */
2392
+ /***/ function(module, exports, __webpack_require__) {
2393
+
2394
+ // 20.2.2.30 Math.sinh(x)
2395
+ var $export = __webpack_require__(6)
2396
+ , expm1 = __webpack_require__(110)
2397
+ , exp = Math.exp;
2398
+
2399
+ // V8 near Chromium 38 has a problem with very small numbers
2400
+ $export($export.S + $export.F * __webpack_require__(5)(function(){
2401
+ return !Math.sinh(-2e-17) != -2e-17;
2402
+ }), 'Math', {
2403
+ sinh: function sinh(x){
2404
+ return Math.abs(x = +x) < 1
2405
+ ? (expm1(x) - expm1(-x)) / 2
2406
+ : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);
2407
+ }
2408
+ });
2409
+
2410
+ /***/ },
2411
+ /* 119 */
2412
+ /***/ function(module, exports, __webpack_require__) {
2413
+
2414
+ // 20.2.2.33 Math.tanh(x)
2415
+ var $export = __webpack_require__(6)
2416
+ , expm1 = __webpack_require__(110)
2417
+ , exp = Math.exp;
2418
+
2419
+ $export($export.S, 'Math', {
2420
+ tanh: function tanh(x){
2421
+ var a = expm1(x = +x)
2422
+ , b = expm1(-x);
2423
+ return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));
2424
+ }
2425
+ });
2426
+
2427
+ /***/ },
2428
+ /* 120 */
2429
+ /***/ function(module, exports, __webpack_require__) {
2430
+
2431
+ // 20.2.2.34 Math.trunc(x)
2432
+ var $export = __webpack_require__(6);
2433
+
2434
+ $export($export.S, 'Math', {
2435
+ trunc: function trunc(it){
2436
+ return (it > 0 ? Math.floor : Math.ceil)(it);
2437
+ }
2438
+ });
2439
+
2440
+ /***/ },
2441
+ /* 121 */
2442
+ /***/ function(module, exports, __webpack_require__) {
2443
+
2444
+ var $export = __webpack_require__(6)
2445
+ , toIndex = __webpack_require__(37)
2446
+ , fromCharCode = String.fromCharCode
2447
+ , $fromCodePoint = String.fromCodePoint;
2448
+
2449
+ // length should be 1, old FF problem
2450
+ $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
2451
+ // 21.1.2.2 String.fromCodePoint(...codePoints)
2452
+ fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars
2453
+ var res = []
2454
+ , aLen = arguments.length
2455
+ , i = 0
2456
+ , code;
2457
+ while(aLen > i){
2458
+ code = +arguments[i++];
2459
+ if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');
2460
+ res.push(code < 0x10000
2461
+ ? fromCharCode(code)
2462
+ : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
2463
+ );
2464
+ } return res.join('');
2465
+ }
2466
+ });
2467
+
2468
+ /***/ },
2469
+ /* 122 */
2470
+ /***/ function(module, exports, __webpack_require__) {
2471
+
2472
+ var $export = __webpack_require__(6)
2473
+ , toIObject = __webpack_require__(30)
2474
+ , toLength = __webpack_require__(35);
2475
+
2476
+ $export($export.S, 'String', {
2477
+ // 21.1.2.4 String.raw(callSite, ...substitutions)
2478
+ raw: function raw(callSite){
2479
+ var tpl = toIObject(callSite.raw)
2480
+ , len = toLength(tpl.length)
2481
+ , aLen = arguments.length
2482
+ , res = []
2483
+ , i = 0;
2484
+ while(len > i){
2485
+ res.push(String(tpl[i++]));
2486
+ if(i < aLen)res.push(String(arguments[i]));
2487
+ } return res.join('');
2488
+ }
2489
+ });
2490
+
2491
+ /***/ },
2492
+ /* 123 */
2493
+ /***/ function(module, exports, __webpack_require__) {
2494
+
2495
+ 'use strict';
2496
+ // 21.1.3.25 String.prototype.trim()
2497
+ __webpack_require__(81)('trim', function($trim){
2498
+ return function trim(){
2499
+ return $trim(this, 3);
2500
+ };
2501
+ });
2502
+
2503
+ /***/ },
2504
+ /* 124 */
2505
+ /***/ function(module, exports, __webpack_require__) {
2506
+
2507
+ 'use strict';
2508
+ var $export = __webpack_require__(6)
2509
+ , $at = __webpack_require__(125)(false);
2510
+ $export($export.P, 'String', {
2511
+ // 21.1.3.3 String.prototype.codePointAt(pos)
2512
+ codePointAt: function codePointAt(pos){
2513
+ return $at(this, pos);
2514
+ }
2515
+ });
2516
+
2517
+ /***/ },
2518
+ /* 125 */
2519
+ /***/ function(module, exports, __webpack_require__) {
2520
+
2521
+ var toInteger = __webpack_require__(36)
2522
+ , defined = __webpack_require__(33);
2523
+ // true -> String#at
2524
+ // false -> String#codePointAt
2525
+ module.exports = function(TO_STRING){
2526
+ return function(that, pos){
2527
+ var s = String(defined(that))
2528
+ , i = toInteger(pos)
2529
+ , l = s.length
2530
+ , a, b;
2531
+ if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
2532
+ a = s.charCodeAt(i);
2533
+ return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
2534
+ ? TO_STRING ? s.charAt(i) : a
2535
+ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
2536
+ };
2537
+ };
2538
+
2539
+ /***/ },
2540
+ /* 126 */
2541
+ /***/ function(module, exports, __webpack_require__) {
2542
+
2543
+ // 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])
2544
+ 'use strict';
2545
+ var $export = __webpack_require__(6)
2546
+ , toLength = __webpack_require__(35)
2547
+ , context = __webpack_require__(127)
2548
+ , ENDS_WITH = 'endsWith'
2549
+ , $endsWith = ''[ENDS_WITH];
2550
+
2551
+ $export($export.P + $export.F * __webpack_require__(129)(ENDS_WITH), 'String', {
2552
+ endsWith: function endsWith(searchString /*, endPosition = @length */){
2553
+ var that = context(this, searchString, ENDS_WITH)
2554
+ , endPosition = arguments.length > 1 ? arguments[1] : undefined
2555
+ , len = toLength(that.length)
2556
+ , end = endPosition === undefined ? len : Math.min(toLength(endPosition), len)
2557
+ , search = String(searchString);
2558
+ return $endsWith
2559
+ ? $endsWith.call(that, search, end)
2560
+ : that.slice(end - search.length, end) === search;
2561
+ }
2562
+ });
2563
+
2564
+ /***/ },
2565
+ /* 127 */
2566
+ /***/ function(module, exports, __webpack_require__) {
2567
+
2568
+ // helper for String#{startsWith, endsWith, includes}
2569
+ var isRegExp = __webpack_require__(128)
2570
+ , defined = __webpack_require__(33);
2571
+
2572
+ module.exports = function(that, searchString, NAME){
2573
+ if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!");
2574
+ return String(defined(that));
2575
+ };
2576
+
2577
+ /***/ },
2578
+ /* 128 */
2579
+ /***/ function(module, exports, __webpack_require__) {
2580
+
2581
+ // 7.2.8 IsRegExp(argument)
2582
+ var isObject = __webpack_require__(11)
2583
+ , cof = __webpack_require__(32)
2584
+ , MATCH = __webpack_require__(23)('match');
2585
+ module.exports = function(it){
2586
+ var isRegExp;
2587
+ return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
2588
+ };
2589
+
2590
+ /***/ },
2591
+ /* 129 */
2592
+ /***/ function(module, exports, __webpack_require__) {
2593
+
2594
+ var MATCH = __webpack_require__(23)('match');
2595
+ module.exports = function(KEY){
2596
+ var re = /./;
2597
+ try {
2598
+ '/./'[KEY](re);
2599
+ } catch(e){
2600
+ try {
2601
+ re[MATCH] = false;
2602
+ return !'/./'[KEY](re);
2603
+ } catch(f){ /* empty */ }
2604
+ } return true;
2605
+ };
2606
+
2607
+ /***/ },
2608
+ /* 130 */
2609
+ /***/ function(module, exports, __webpack_require__) {
2610
+
2611
+ // 21.1.3.7 String.prototype.includes(searchString, position = 0)
2612
+ 'use strict';
2613
+ var $export = __webpack_require__(6)
2614
+ , context = __webpack_require__(127)
2615
+ , INCLUDES = 'includes';
2616
+
2617
+ $export($export.P + $export.F * __webpack_require__(129)(INCLUDES), 'String', {
2618
+ includes: function includes(searchString /*, position = 0 */){
2619
+ return !!~context(this, searchString, INCLUDES)
2620
+ .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
2621
+ }
2622
+ });
2623
+
2624
+ /***/ },
2625
+ /* 131 */
2626
+ /***/ function(module, exports, __webpack_require__) {
2627
+
2628
+ var $export = __webpack_require__(6);
2629
+
2630
+ $export($export.P, 'String', {
2631
+ // 21.1.3.13 String.prototype.repeat(count)
2632
+ repeat: __webpack_require__(85)
2633
+ });
2634
+
2635
+ /***/ },
2636
+ /* 132 */
2637
+ /***/ function(module, exports, __webpack_require__) {
2638
+
2639
+ // 21.1.3.18 String.prototype.startsWith(searchString [, position ])
2640
+ 'use strict';
2641
+ var $export = __webpack_require__(6)
2642
+ , toLength = __webpack_require__(35)
2643
+ , context = __webpack_require__(127)
2644
+ , STARTS_WITH = 'startsWith'
2645
+ , $startsWith = ''[STARTS_WITH];
2646
+
2647
+ $export($export.P + $export.F * __webpack_require__(129)(STARTS_WITH), 'String', {
2648
+ startsWith: function startsWith(searchString /*, position = 0 */){
2649
+ var that = context(this, searchString, STARTS_WITH)
2650
+ , index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length))
2651
+ , search = String(searchString);
2652
+ return $startsWith
2653
+ ? $startsWith.call(that, search, index)
2654
+ : that.slice(index, index + search.length) === search;
2655
+ }
2656
+ });
2657
+
2658
+ /***/ },
2659
+ /* 133 */
2660
+ /***/ function(module, exports, __webpack_require__) {
2661
+
2662
+ 'use strict';
2663
+ var $at = __webpack_require__(125)(true);
2664
+
2665
+ // 21.1.3.27 String.prototype[@@iterator]()
2666
+ __webpack_require__(134)(String, 'String', function(iterated){
2667
+ this._t = String(iterated); // target
2668
+ this._i = 0; // next index
2669
+ // 21.1.5.2.1 %StringIteratorPrototype%.next()
2670
+ }, function(){
2671
+ var O = this._t
2672
+ , index = this._i
2673
+ , point;
2674
+ if(index >= O.length)return {value: undefined, done: true};
2675
+ point = $at(O, index);
2676
+ this._i += point.length;
2677
+ return {value: point, done: false};
2678
+ });
2679
+
2680
+ /***/ },
2681
+ /* 134 */
2682
+ /***/ function(module, exports, __webpack_require__) {
2683
+
2684
+ 'use strict';
2685
+ var LIBRARY = __webpack_require__(26)
2686
+ , $export = __webpack_require__(6)
2687
+ , redefine = __webpack_require__(16)
2688
+ , hide = __webpack_require__(8)
2689
+ , has = __webpack_require__(3)
2690
+ , Iterators = __webpack_require__(135)
2691
+ , $iterCreate = __webpack_require__(136)
2692
+ , setToStringTag = __webpack_require__(22)
2693
+ , getPrototypeOf = __webpack_require__(57)
2694
+ , ITERATOR = __webpack_require__(23)('iterator')
2695
+ , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
2696
+ , FF_ITERATOR = '@@iterator'
2697
+ , KEYS = 'keys'
2698
+ , VALUES = 'values';
2699
+
2700
+ var returnThis = function(){ return this; };
2701
+
2702
+ module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
2703
+ $iterCreate(Constructor, NAME, next);
2704
+ var getMethod = function(kind){
2705
+ if(!BUGGY && kind in proto)return proto[kind];
2706
+ switch(kind){
2707
+ case KEYS: return function keys(){ return new Constructor(this, kind); };
2708
+ case VALUES: return function values(){ return new Constructor(this, kind); };
2709
+ } return function entries(){ return new Constructor(this, kind); };
2710
+ };
2711
+ var TAG = NAME + ' Iterator'
2712
+ , DEF_VALUES = DEFAULT == VALUES
2713
+ , VALUES_BUG = false
2714
+ , proto = Base.prototype
2715
+ , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
2716
+ , $default = $native || getMethod(DEFAULT)
2717
+ , $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined
2718
+ , $anyNative = NAME == 'Array' ? proto.entries || $native : $native
2719
+ , methods, key, IteratorPrototype;
2720
+ // Fix native
2721
+ if($anyNative){
2722
+ IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
2723
+ if(IteratorPrototype !== Object.prototype){
2724
+ // Set @@toStringTag to native iterators
2725
+ setToStringTag(IteratorPrototype, TAG, true);
2726
+ // fix for some old engines
2727
+ if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
2728
+ }
2729
+ }
2730
+ // fix Array#{values, @@iterator}.name in V8 / FF
2731
+ if(DEF_VALUES && $native && $native.name !== VALUES){
2732
+ VALUES_BUG = true;
2733
+ $default = function values(){ return $native.call(this); };
2734
+ }
2735
+ // Define iterator
2736
+ if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
2737
+ hide(proto, ITERATOR, $default);
2738
+ }
2739
+ // Plug for library
2740
+ Iterators[NAME] = $default;
2741
+ Iterators[TAG] = returnThis;
2742
+ if(DEFAULT){
2743
+ methods = {
2744
+ values: DEF_VALUES ? $default : getMethod(VALUES),
2745
+ keys: IS_SET ? $default : getMethod(KEYS),
2746
+ entries: $entries
2747
+ };
2748
+ if(FORCED)for(key in methods){
2749
+ if(!(key in proto))redefine(proto, key, methods[key]);
2750
+ } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
2751
+ }
2752
+ return methods;
2753
+ };
2754
+
2755
+ /***/ },
2756
+ /* 135 */
2757
+ /***/ function(module, exports) {
2758
+
2759
+ module.exports = {};
2760
+
2761
+ /***/ },
2762
+ /* 136 */
2763
+ /***/ function(module, exports, __webpack_require__) {
2764
+
2765
+ 'use strict';
2766
+ var create = __webpack_require__(44)
2767
+ , descriptor = __webpack_require__(15)
2768
+ , setToStringTag = __webpack_require__(22)
2769
+ , IteratorPrototype = {};
2770
+
2771
+ // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
2772
+ __webpack_require__(8)(IteratorPrototype, __webpack_require__(23)('iterator'), function(){ return this; });
2773
+
2774
+ module.exports = function(Constructor, NAME, next){
2775
+ Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
2776
+ setToStringTag(Constructor, NAME + ' Iterator');
2777
+ };
2778
+
2779
+ /***/ },
2780
+ /* 137 */
2781
+ /***/ function(module, exports, __webpack_require__) {
2782
+
2783
+ 'use strict';
2784
+ // B.2.3.2 String.prototype.anchor(name)
2785
+ __webpack_require__(138)('anchor', function(createHTML){
2786
+ return function anchor(name){
2787
+ return createHTML(this, 'a', 'name', name);
2788
+ }
2789
+ });
2790
+
2791
+ /***/ },
2792
+ /* 138 */
2793
+ /***/ function(module, exports, __webpack_require__) {
2794
+
2795
+ var $export = __webpack_require__(6)
2796
+ , fails = __webpack_require__(5)
2797
+ , defined = __webpack_require__(33)
2798
+ , quot = /"/g;
2799
+ // B.2.3.2.1 CreateHTML(string, tag, attribute, value)
2800
+ var createHTML = function(string, tag, attribute, value) {
2801
+ var S = String(defined(string))
2802
+ , p1 = '<' + tag;
2803
+ if(attribute !== '')p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
2804
+ return p1 + '>' + S + '</' + tag + '>';
2805
+ };
2806
+ module.exports = function(NAME, exec){
2807
+ var O = {};
2808
+ O[NAME] = exec(createHTML);
2809
+ $export($export.P + $export.F * fails(function(){
2810
+ var test = ''[NAME]('"');
2811
+ return test !== test.toLowerCase() || test.split('"').length > 3;
2812
+ }), 'String', O);
2813
+ };
2814
+
2815
+ /***/ },
2816
+ /* 139 */
2817
+ /***/ function(module, exports, __webpack_require__) {
2818
+
2819
+ 'use strict';
2820
+ // B.2.3.3 String.prototype.big()
2821
+ __webpack_require__(138)('big', function(createHTML){
2822
+ return function big(){
2823
+ return createHTML(this, 'big', '', '');
2824
+ }
2825
+ });
2826
+
2827
+ /***/ },
2828
+ /* 140 */
2829
+ /***/ function(module, exports, __webpack_require__) {
2830
+
2831
+ 'use strict';
2832
+ // B.2.3.4 String.prototype.blink()
2833
+ __webpack_require__(138)('blink', function(createHTML){
2834
+ return function blink(){
2835
+ return createHTML(this, 'blink', '', '');
2836
+ }
2837
+ });
2838
+
2839
+ /***/ },
2840
+ /* 141 */
2841
+ /***/ function(module, exports, __webpack_require__) {
2842
+
2843
+ 'use strict';
2844
+ // B.2.3.5 String.prototype.bold()
2845
+ __webpack_require__(138)('bold', function(createHTML){
2846
+ return function bold(){
2847
+ return createHTML(this, 'b', '', '');
2848
+ }
2849
+ });
2850
+
2851
+ /***/ },
2852
+ /* 142 */
2853
+ /***/ function(module, exports, __webpack_require__) {
2854
+
2855
+ 'use strict';
2856
+ // B.2.3.6 String.prototype.fixed()
2857
+ __webpack_require__(138)('fixed', function(createHTML){
2858
+ return function fixed(){
2859
+ return createHTML(this, 'tt', '', '');
2860
+ }
2861
+ });
2862
+
2863
+ /***/ },
2864
+ /* 143 */
2865
+ /***/ function(module, exports, __webpack_require__) {
2866
+
2867
+ 'use strict';
2868
+ // B.2.3.7 String.prototype.fontcolor(color)
2869
+ __webpack_require__(138)('fontcolor', function(createHTML){
2870
+ return function fontcolor(color){
2871
+ return createHTML(this, 'font', 'color', color);
2872
+ }
2873
+ });
2874
+
2875
+ /***/ },
2876
+ /* 144 */
2877
+ /***/ function(module, exports, __webpack_require__) {
2878
+
2879
+ 'use strict';
2880
+ // B.2.3.8 String.prototype.fontsize(size)
2881
+ __webpack_require__(138)('fontsize', function(createHTML){
2882
+ return function fontsize(size){
2883
+ return createHTML(this, 'font', 'size', size);
2884
+ }
2885
+ });
2886
+
2887
+ /***/ },
2888
+ /* 145 */
2889
+ /***/ function(module, exports, __webpack_require__) {
2890
+
2891
+ 'use strict';
2892
+ // B.2.3.9 String.prototype.italics()
2893
+ __webpack_require__(138)('italics', function(createHTML){
2894
+ return function italics(){
2895
+ return createHTML(this, 'i', '', '');
2896
+ }
2897
+ });
2898
+
2899
+ /***/ },
2900
+ /* 146 */
2901
+ /***/ function(module, exports, __webpack_require__) {
2902
+
2903
+ 'use strict';
2904
+ // B.2.3.10 String.prototype.link(url)
2905
+ __webpack_require__(138)('link', function(createHTML){
2906
+ return function link(url){
2907
+ return createHTML(this, 'a', 'href', url);
2908
+ }
2909
+ });
2910
+
2911
+ /***/ },
2912
+ /* 147 */
2913
+ /***/ function(module, exports, __webpack_require__) {
2914
+
2915
+ 'use strict';
2916
+ // B.2.3.11 String.prototype.small()
2917
+ __webpack_require__(138)('small', function(createHTML){
2918
+ return function small(){
2919
+ return createHTML(this, 'small', '', '');
2920
+ }
2921
+ });
2922
+
2923
+ /***/ },
2924
+ /* 148 */
2925
+ /***/ function(module, exports, __webpack_require__) {
2926
+
2927
+ 'use strict';
2928
+ // B.2.3.12 String.prototype.strike()
2929
+ __webpack_require__(138)('strike', function(createHTML){
2930
+ return function strike(){
2931
+ return createHTML(this, 'strike', '', '');
2932
+ }
2933
+ });
2934
+
2935
+ /***/ },
2936
+ /* 149 */
2937
+ /***/ function(module, exports, __webpack_require__) {
2938
+
2939
+ 'use strict';
2940
+ // B.2.3.13 String.prototype.sub()
2941
+ __webpack_require__(138)('sub', function(createHTML){
2942
+ return function sub(){
2943
+ return createHTML(this, 'sub', '', '');
2944
+ }
2945
+ });
2946
+
2947
+ /***/ },
2948
+ /* 150 */
2949
+ /***/ function(module, exports, __webpack_require__) {
2950
+
2951
+ 'use strict';
2952
+ // B.2.3.14 String.prototype.sup()
2953
+ __webpack_require__(138)('sup', function(createHTML){
2954
+ return function sup(){
2955
+ return createHTML(this, 'sup', '', '');
2956
+ }
2957
+ });
2958
+
2959
+ /***/ },
2960
+ /* 151 */
2961
+ /***/ function(module, exports, __webpack_require__) {
2962
+
2963
+ // 22.1.2.2 / 15.4.3.2 Array.isArray(arg)
2964
+ var $export = __webpack_require__(6);
2965
+
2966
+ $export($export.S, 'Array', {isArray: __webpack_require__(43)});
2967
+
2968
+ /***/ },
2969
+ /* 152 */
2970
+ /***/ function(module, exports, __webpack_require__) {
2971
+
2972
+ 'use strict';
2973
+ var ctx = __webpack_require__(18)
2974
+ , $export = __webpack_require__(6)
2975
+ , toObject = __webpack_require__(56)
2976
+ , call = __webpack_require__(153)
2977
+ , isArrayIter = __webpack_require__(154)
2978
+ , toLength = __webpack_require__(35)
2979
+ , createProperty = __webpack_require__(155)
2980
+ , getIterFn = __webpack_require__(156);
2981
+
2982
+ $export($export.S + $export.F * !__webpack_require__(157)(function(iter){ Array.from(iter); }), 'Array', {
2983
+ // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
2984
+ from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){
2985
+ var O = toObject(arrayLike)
2986
+ , C = typeof this == 'function' ? this : Array
2987
+ , aLen = arguments.length
2988
+ , mapfn = aLen > 1 ? arguments[1] : undefined
2989
+ , mapping = mapfn !== undefined
2990
+ , index = 0
2991
+ , iterFn = getIterFn(O)
2992
+ , length, result, step, iterator;
2993
+ if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
2994
+ // if object isn't iterable or it's array with default iterator - use simple case
2995
+ if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){
2996
+ for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){
2997
+ createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
2998
+ }
2999
+ } else {
3000
+ length = toLength(O.length);
3001
+ for(result = new C(length); length > index; index++){
3002
+ createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
3003
+ }
3004
+ }
3005
+ result.length = index;
3006
+ return result;
3007
+ }
3008
+ });
3009
+
3010
+
3011
+ /***/ },
3012
+ /* 153 */
3013
+ /***/ function(module, exports, __webpack_require__) {
3014
+
3015
+ // call something on iterator step with safe closing on error
3016
+ var anObject = __webpack_require__(10);
3017
+ module.exports = function(iterator, fn, value, entries){
3018
+ try {
3019
+ return entries ? fn(anObject(value)[0], value[1]) : fn(value);
3020
+ // 7.4.6 IteratorClose(iterator, completion)
3021
+ } catch(e){
3022
+ var ret = iterator['return'];
3023
+ if(ret !== undefined)anObject(ret.call(iterator));
3024
+ throw e;
3025
+ }
3026
+ };
3027
+
3028
+ /***/ },
3029
+ /* 154 */
3030
+ /***/ function(module, exports, __webpack_require__) {
3031
+
3032
+ // check on default Array iterator
3033
+ var Iterators = __webpack_require__(135)
3034
+ , ITERATOR = __webpack_require__(23)('iterator')
3035
+ , ArrayProto = Array.prototype;
3036
+
3037
+ module.exports = function(it){
3038
+ return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
3039
+ };
3040
+
3041
+ /***/ },
3042
+ /* 155 */
3043
+ /***/ function(module, exports, __webpack_require__) {
3044
+
3045
+ 'use strict';
3046
+ var $defineProperty = __webpack_require__(9)
3047
+ , createDesc = __webpack_require__(15);
3048
+
3049
+ module.exports = function(object, index, value){
3050
+ if(index in object)$defineProperty.f(object, index, createDesc(0, value));
3051
+ else object[index] = value;
3052
+ };
3053
+
3054
+ /***/ },
3055
+ /* 156 */
3056
+ /***/ function(module, exports, __webpack_require__) {
3057
+
3058
+ var classof = __webpack_require__(73)
3059
+ , ITERATOR = __webpack_require__(23)('iterator')
3060
+ , Iterators = __webpack_require__(135);
3061
+ module.exports = __webpack_require__(7).getIteratorMethod = function(it){
3062
+ if(it != undefined)return it[ITERATOR]
3063
+ || it['@@iterator']
3064
+ || Iterators[classof(it)];
3065
+ };
3066
+
3067
+ /***/ },
3068
+ /* 157 */
3069
+ /***/ function(module, exports, __webpack_require__) {
3070
+
3071
+ var ITERATOR = __webpack_require__(23)('iterator')
3072
+ , SAFE_CLOSING = false;
3073
+
3074
+ try {
3075
+ var riter = [7][ITERATOR]();
3076
+ riter['return'] = function(){ SAFE_CLOSING = true; };
3077
+ Array.from(riter, function(){ throw 2; });
3078
+ } catch(e){ /* empty */ }
3079
+
3080
+ module.exports = function(exec, skipClosing){
3081
+ if(!skipClosing && !SAFE_CLOSING)return false;
3082
+ var safe = false;
3083
+ try {
3084
+ var arr = [7]
3085
+ , iter = arr[ITERATOR]();
3086
+ iter.next = function(){ return {done: safe = true}; };
3087
+ arr[ITERATOR] = function(){ return iter; };
3088
+ exec(arr);
3089
+ } catch(e){ /* empty */ }
3090
+ return safe;
3091
+ };
3092
+
3093
+ /***/ },
3094
+ /* 158 */
3095
+ /***/ function(module, exports, __webpack_require__) {
3096
+
3097
+ 'use strict';
3098
+ var $export = __webpack_require__(6)
3099
+ , createProperty = __webpack_require__(155);
3100
+
3101
+ // WebKit Array.of isn't generic
3102
+ $export($export.S + $export.F * __webpack_require__(5)(function(){
3103
+ function F(){}
3104
+ return !(Array.of.call(F) instanceof F);
3105
+ }), 'Array', {
3106
+ // 22.1.2.3 Array.of( ...items)
3107
+ of: function of(/* ...args */){
3108
+ var index = 0
3109
+ , aLen = arguments.length
3110
+ , result = new (typeof this == 'function' ? this : Array)(aLen);
3111
+ while(aLen > index)createProperty(result, index, arguments[index++]);
3112
+ result.length = aLen;
3113
+ return result;
3114
+ }
3115
+ });
3116
+
3117
+ /***/ },
3118
+ /* 159 */
3119
+ /***/ function(module, exports, __webpack_require__) {
3120
+
3121
+ 'use strict';
3122
+ // 22.1.3.13 Array.prototype.join(separator)
3123
+ var $export = __webpack_require__(6)
3124
+ , toIObject = __webpack_require__(30)
3125
+ , arrayJoin = [].join;
3126
+
3127
+ // fallback for not array-like strings
3128
+ $export($export.P + $export.F * (__webpack_require__(31) != Object || !__webpack_require__(160)(arrayJoin)), 'Array', {
3129
+ join: function join(separator){
3130
+ return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);
3131
+ }
3132
+ });
3133
+
3134
+ /***/ },
3135
+ /* 160 */
3136
+ /***/ function(module, exports, __webpack_require__) {
3137
+
3138
+ var fails = __webpack_require__(5);
3139
+
3140
+ module.exports = function(method, arg){
3141
+ return !!method && fails(function(){
3142
+ arg ? method.call(null, function(){}, 1) : method.call(null);
3143
+ });
3144
+ };
3145
+
3146
+ /***/ },
3147
+ /* 161 */
3148
+ /***/ function(module, exports, __webpack_require__) {
3149
+
3150
+ 'use strict';
3151
+ var $export = __webpack_require__(6)
3152
+ , html = __webpack_require__(46)
3153
+ , cof = __webpack_require__(32)
3154
+ , toIndex = __webpack_require__(37)
3155
+ , toLength = __webpack_require__(35)
3156
+ , arraySlice = [].slice;
3157
+
3158
+ // fallback for not array-like ES3 strings and DOM objects
3159
+ $export($export.P + $export.F * __webpack_require__(5)(function(){
3160
+ if(html)arraySlice.call(html);
3161
+ }), 'Array', {
3162
+ slice: function slice(begin, end){
3163
+ var len = toLength(this.length)
3164
+ , klass = cof(this);
3165
+ end = end === undefined ? len : end;
3166
+ if(klass == 'Array')return arraySlice.call(this, begin, end);
3167
+ var start = toIndex(begin, len)
3168
+ , upTo = toIndex(end, len)
3169
+ , size = toLength(upTo - start)
3170
+ , cloned = Array(size)
3171
+ , i = 0;
3172
+ for(; i < size; i++)cloned[i] = klass == 'String'
3173
+ ? this.charAt(start + i)
3174
+ : this[start + i];
3175
+ return cloned;
3176
+ }
3177
+ });
3178
+
3179
+ /***/ },
3180
+ /* 162 */
3181
+ /***/ function(module, exports, __webpack_require__) {
3182
+
3183
+ 'use strict';
3184
+ var $export = __webpack_require__(6)
3185
+ , aFunction = __webpack_require__(19)
3186
+ , toObject = __webpack_require__(56)
3187
+ , fails = __webpack_require__(5)
3188
+ , $sort = [].sort
3189
+ , test = [1, 2, 3];
3190
+
3191
+ $export($export.P + $export.F * (fails(function(){
3192
+ // IE8-
3193
+ test.sort(undefined);
3194
+ }) || !fails(function(){
3195
+ // V8 bug
3196
+ test.sort(null);
3197
+ // Old WebKit
3198
+ }) || !__webpack_require__(160)($sort)), 'Array', {
3199
+ // 22.1.3.25 Array.prototype.sort(comparefn)
3200
+ sort: function sort(comparefn){
3201
+ return comparefn === undefined
3202
+ ? $sort.call(toObject(this))
3203
+ : $sort.call(toObject(this), aFunction(comparefn));
3204
+ }
3205
+ });
3206
+
3207
+ /***/ },
3208
+ /* 163 */
3209
+ /***/ function(module, exports, __webpack_require__) {
3210
+
3211
+ 'use strict';
3212
+ var $export = __webpack_require__(6)
3213
+ , $forEach = __webpack_require__(164)(0)
3214
+ , STRICT = __webpack_require__(160)([].forEach, true);
3215
+
3216
+ $export($export.P + $export.F * !STRICT, 'Array', {
3217
+ // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])
3218
+ forEach: function forEach(callbackfn /* , thisArg */){
3219
+ return $forEach(this, callbackfn, arguments[1]);
3220
+ }
3221
+ });
3222
+
3223
+ /***/ },
3224
+ /* 164 */
3225
+ /***/ function(module, exports, __webpack_require__) {
3226
+
3227
+ // 0 -> Array#forEach
3228
+ // 1 -> Array#map
3229
+ // 2 -> Array#filter
3230
+ // 3 -> Array#some
3231
+ // 4 -> Array#every
3232
+ // 5 -> Array#find
3233
+ // 6 -> Array#findIndex
3234
+ var ctx = __webpack_require__(18)
3235
+ , IObject = __webpack_require__(31)
3236
+ , toObject = __webpack_require__(56)
3237
+ , toLength = __webpack_require__(35)
3238
+ , asc = __webpack_require__(165);
3239
+ module.exports = function(TYPE, $create){
3240
+ var IS_MAP = TYPE == 1
3241
+ , IS_FILTER = TYPE == 2
3242
+ , IS_SOME = TYPE == 3
3243
+ , IS_EVERY = TYPE == 4
3244
+ , IS_FIND_INDEX = TYPE == 6
3245
+ , NO_HOLES = TYPE == 5 || IS_FIND_INDEX
3246
+ , create = $create || asc;
3247
+ return function($this, callbackfn, that){
3248
+ var O = toObject($this)
3249
+ , self = IObject(O)
3250
+ , f = ctx(callbackfn, that, 3)
3251
+ , length = toLength(self.length)
3252
+ , index = 0
3253
+ , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined
3254
+ , val, res;
3255
+ for(;length > index; index++)if(NO_HOLES || index in self){
3256
+ val = self[index];
3257
+ res = f(val, index, O);
3258
+ if(TYPE){
3259
+ if(IS_MAP)result[index] = res; // map
3260
+ else if(res)switch(TYPE){
3261
+ case 3: return true; // some
3262
+ case 5: return val; // find
3263
+ case 6: return index; // findIndex
3264
+ case 2: result.push(val); // filter
3265
+ } else if(IS_EVERY)return false; // every
3266
+ }
3267
+ }
3268
+ return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
3269
+ };
3270
+ };
3271
+
3272
+ /***/ },
3273
+ /* 165 */
3274
+ /***/ function(module, exports, __webpack_require__) {
3275
+
3276
+ // 9.4.2.3 ArraySpeciesCreate(originalArray, length)
3277
+ var speciesConstructor = __webpack_require__(166);
3278
+
3279
+ module.exports = function(original, length){
3280
+ return new (speciesConstructor(original))(length);
3281
+ };
3282
+
3283
+ /***/ },
3284
+ /* 166 */
3285
+ /***/ function(module, exports, __webpack_require__) {
3286
+
3287
+ var isObject = __webpack_require__(11)
3288
+ , isArray = __webpack_require__(43)
3289
+ , SPECIES = __webpack_require__(23)('species');
3290
+
3291
+ module.exports = function(original){
3292
+ var C;
3293
+ if(isArray(original)){
3294
+ C = original.constructor;
3295
+ // cross-realm fallback
3296
+ if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;
3297
+ if(isObject(C)){
3298
+ C = C[SPECIES];
3299
+ if(C === null)C = undefined;
3300
+ }
3301
+ } return C === undefined ? Array : C;
3302
+ };
3303
+
3304
+ /***/ },
3305
+ /* 167 */
3306
+ /***/ function(module, exports, __webpack_require__) {
3307
+
3308
+ 'use strict';
3309
+ var $export = __webpack_require__(6)
3310
+ , $map = __webpack_require__(164)(1);
3311
+
3312
+ $export($export.P + $export.F * !__webpack_require__(160)([].map, true), 'Array', {
3313
+ // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])
3314
+ map: function map(callbackfn /* , thisArg */){
3315
+ return $map(this, callbackfn, arguments[1]);
3316
+ }
3317
+ });
3318
+
3319
+ /***/ },
3320
+ /* 168 */
3321
+ /***/ function(module, exports, __webpack_require__) {
3322
+
3323
+ 'use strict';
3324
+ var $export = __webpack_require__(6)
3325
+ , $filter = __webpack_require__(164)(2);
3326
+
3327
+ $export($export.P + $export.F * !__webpack_require__(160)([].filter, true), 'Array', {
3328
+ // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])
3329
+ filter: function filter(callbackfn /* , thisArg */){
3330
+ return $filter(this, callbackfn, arguments[1]);
3331
+ }
3332
+ });
3333
+
3334
+ /***/ },
3335
+ /* 169 */
3336
+ /***/ function(module, exports, __webpack_require__) {
3337
+
3338
+ 'use strict';
3339
+ var $export = __webpack_require__(6)
3340
+ , $some = __webpack_require__(164)(3);
3341
+
3342
+ $export($export.P + $export.F * !__webpack_require__(160)([].some, true), 'Array', {
3343
+ // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])
3344
+ some: function some(callbackfn /* , thisArg */){
3345
+ return $some(this, callbackfn, arguments[1]);
3346
+ }
3347
+ });
3348
+
3349
+ /***/ },
3350
+ /* 170 */
3351
+ /***/ function(module, exports, __webpack_require__) {
3352
+
3353
+ 'use strict';
3354
+ var $export = __webpack_require__(6)
3355
+ , $every = __webpack_require__(164)(4);
3356
+
3357
+ $export($export.P + $export.F * !__webpack_require__(160)([].every, true), 'Array', {
3358
+ // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])
3359
+ every: function every(callbackfn /* , thisArg */){
3360
+ return $every(this, callbackfn, arguments[1]);
3361
+ }
3362
+ });
3363
+
3364
+ /***/ },
3365
+ /* 171 */
3366
+ /***/ function(module, exports, __webpack_require__) {
3367
+
3368
+ 'use strict';
3369
+ var $export = __webpack_require__(6)
3370
+ , $reduce = __webpack_require__(172);
3371
+
3372
+ $export($export.P + $export.F * !__webpack_require__(160)([].reduce, true), 'Array', {
3373
+ // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])
3374
+ reduce: function reduce(callbackfn /* , initialValue */){
3375
+ return $reduce(this, callbackfn, arguments.length, arguments[1], false);
3376
+ }
3377
+ });
3378
+
3379
+ /***/ },
3380
+ /* 172 */
3381
+ /***/ function(module, exports, __webpack_require__) {
3382
+
3383
+ var aFunction = __webpack_require__(19)
3384
+ , toObject = __webpack_require__(56)
3385
+ , IObject = __webpack_require__(31)
3386
+ , toLength = __webpack_require__(35);
3387
+
3388
+ module.exports = function(that, callbackfn, aLen, memo, isRight){
3389
+ aFunction(callbackfn);
3390
+ var O = toObject(that)
3391
+ , self = IObject(O)
3392
+ , length = toLength(O.length)
3393
+ , index = isRight ? length - 1 : 0
3394
+ , i = isRight ? -1 : 1;
3395
+ if(aLen < 2)for(;;){
3396
+ if(index in self){
3397
+ memo = self[index];
3398
+ index += i;
3399
+ break;
3400
+ }
3401
+ index += i;
3402
+ if(isRight ? index < 0 : length <= index){
3403
+ throw TypeError('Reduce of empty array with no initial value');
3404
+ }
3405
+ }
3406
+ for(;isRight ? index >= 0 : length > index; index += i)if(index in self){
3407
+ memo = callbackfn(memo, self[index], index, O);
3408
+ }
3409
+ return memo;
3410
+ };
3411
+
3412
+ /***/ },
3413
+ /* 173 */
3414
+ /***/ function(module, exports, __webpack_require__) {
3415
+
3416
+ 'use strict';
3417
+ var $export = __webpack_require__(6)
3418
+ , $reduce = __webpack_require__(172);
3419
+
3420
+ $export($export.P + $export.F * !__webpack_require__(160)([].reduceRight, true), 'Array', {
3421
+ // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])
3422
+ reduceRight: function reduceRight(callbackfn /* , initialValue */){
3423
+ return $reduce(this, callbackfn, arguments.length, arguments[1], true);
3424
+ }
3425
+ });
3426
+
3427
+ /***/ },
3428
+ /* 174 */
3429
+ /***/ function(module, exports, __webpack_require__) {
3430
+
3431
+ 'use strict';
3432
+ var $export = __webpack_require__(6)
3433
+ , $indexOf = __webpack_require__(34)(false)
3434
+ , $native = [].indexOf
3435
+ , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;
3436
+
3437
+ $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(160)($native)), 'Array', {
3438
+ // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])
3439
+ indexOf: function indexOf(searchElement /*, fromIndex = 0 */){
3440
+ return NEGATIVE_ZERO
3441
+ // convert -0 to +0
3442
+ ? $native.apply(this, arguments) || 0
3443
+ : $indexOf(this, searchElement, arguments[1]);
3444
+ }
3445
+ });
3446
+
3447
+ /***/ },
3448
+ /* 175 */
3449
+ /***/ function(module, exports, __webpack_require__) {
3450
+
3451
+ 'use strict';
3452
+ var $export = __webpack_require__(6)
3453
+ , toIObject = __webpack_require__(30)
3454
+ , toInteger = __webpack_require__(36)
3455
+ , toLength = __webpack_require__(35)
3456
+ , $native = [].lastIndexOf
3457
+ , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;
3458
+
3459
+ $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(160)($native)), 'Array', {
3460
+ // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])
3461
+ lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){
3462
+ // convert -0 to +0
3463
+ if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;
3464
+ var O = toIObject(this)
3465
+ , length = toLength(O.length)
3466
+ , index = length - 1;
3467
+ if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));
3468
+ if(index < 0)index = length + index;
3469
+ for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;
3470
+ return -1;
3471
+ }
3472
+ });
3473
+
3474
+ /***/ },
3475
+ /* 176 */
3476
+ /***/ function(module, exports, __webpack_require__) {
3477
+
3478
+ // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
3479
+ var $export = __webpack_require__(6);
3480
+
3481
+ $export($export.P, 'Array', {copyWithin: __webpack_require__(177)});
3482
+
3483
+ __webpack_require__(178)('copyWithin');
3484
+
3485
+ /***/ },
3486
+ /* 177 */
3487
+ /***/ function(module, exports, __webpack_require__) {
3488
+
3489
+ // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
3490
+ 'use strict';
3491
+ var toObject = __webpack_require__(56)
3492
+ , toIndex = __webpack_require__(37)
3493
+ , toLength = __webpack_require__(35);
3494
+
3495
+ module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){
3496
+ var O = toObject(this)
3497
+ , len = toLength(O.length)
3498
+ , to = toIndex(target, len)
3499
+ , from = toIndex(start, len)
3500
+ , end = arguments.length > 2 ? arguments[2] : undefined
3501
+ , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)
3502
+ , inc = 1;
3503
+ if(from < to && to < from + count){
3504
+ inc = -1;
3505
+ from += count - 1;
3506
+ to += count - 1;
3507
+ }
3508
+ while(count-- > 0){
3509
+ if(from in O)O[to] = O[from];
3510
+ else delete O[to];
3511
+ to += inc;
3512
+ from += inc;
3513
+ } return O;
3514
+ };
3515
+
3516
+ /***/ },
3517
+ /* 178 */
3518
+ /***/ function(module, exports, __webpack_require__) {
3519
+
3520
+ // 22.1.3.31 Array.prototype[@@unscopables]
3521
+ var UNSCOPABLES = __webpack_require__(23)('unscopables')
3522
+ , ArrayProto = Array.prototype;
3523
+ if(ArrayProto[UNSCOPABLES] == undefined)__webpack_require__(8)(ArrayProto, UNSCOPABLES, {});
3524
+ module.exports = function(key){
3525
+ ArrayProto[UNSCOPABLES][key] = true;
3526
+ };
3527
+
3528
+ /***/ },
3529
+ /* 179 */
3530
+ /***/ function(module, exports, __webpack_require__) {
3531
+
3532
+ // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
3533
+ var $export = __webpack_require__(6);
3534
+
3535
+ $export($export.P, 'Array', {fill: __webpack_require__(180)});
3536
+
3537
+ __webpack_require__(178)('fill');
3538
+
3539
+ /***/ },
3540
+ /* 180 */
3541
+ /***/ function(module, exports, __webpack_require__) {
3542
+
3543
+ // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
3544
+ 'use strict';
3545
+ var toObject = __webpack_require__(56)
3546
+ , toIndex = __webpack_require__(37)
3547
+ , toLength = __webpack_require__(35);
3548
+ module.exports = function fill(value /*, start = 0, end = @length */){
3549
+ var O = toObject(this)
3550
+ , length = toLength(O.length)
3551
+ , aLen = arguments.length
3552
+ , index = toIndex(aLen > 1 ? arguments[1] : undefined, length)
3553
+ , end = aLen > 2 ? arguments[2] : undefined
3554
+ , endPos = end === undefined ? length : toIndex(end, length);
3555
+ while(endPos > index)O[index++] = value;
3556
+ return O;
3557
+ };
3558
+
3559
+ /***/ },
3560
+ /* 181 */
3561
+ /***/ function(module, exports, __webpack_require__) {
3562
+
3563
+ 'use strict';
3564
+ // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
3565
+ var $export = __webpack_require__(6)
3566
+ , $find = __webpack_require__(164)(5)
3567
+ , KEY = 'find'
3568
+ , forced = true;
3569
+ // Shouldn't skip holes
3570
+ if(KEY in [])Array(1)[KEY](function(){ forced = false; });
3571
+ $export($export.P + $export.F * forced, 'Array', {
3572
+ find: function find(callbackfn/*, that = undefined */){
3573
+ return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
3574
+ }
3575
+ });
3576
+ __webpack_require__(178)(KEY);
3577
+
3578
+ /***/ },
3579
+ /* 182 */
3580
+ /***/ function(module, exports, __webpack_require__) {
3581
+
3582
+ 'use strict';
3583
+ // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
3584
+ var $export = __webpack_require__(6)
3585
+ , $find = __webpack_require__(164)(6)
3586
+ , KEY = 'findIndex'
3587
+ , forced = true;
3588
+ // Shouldn't skip holes
3589
+ if(KEY in [])Array(1)[KEY](function(){ forced = false; });
3590
+ $export($export.P + $export.F * forced, 'Array', {
3591
+ findIndex: function findIndex(callbackfn/*, that = undefined */){
3592
+ return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
3593
+ }
3594
+ });
3595
+ __webpack_require__(178)(KEY);
3596
+
3597
+ /***/ },
3598
+ /* 183 */
3599
+ /***/ function(module, exports, __webpack_require__) {
3600
+
3601
+ 'use strict';
3602
+ var addToUnscopables = __webpack_require__(178)
3603
+ , step = __webpack_require__(184)
3604
+ , Iterators = __webpack_require__(135)
3605
+ , toIObject = __webpack_require__(30);
3606
+
3607
+ // 22.1.3.4 Array.prototype.entries()
3608
+ // 22.1.3.13 Array.prototype.keys()
3609
+ // 22.1.3.29 Array.prototype.values()
3610
+ // 22.1.3.30 Array.prototype[@@iterator]()
3611
+ module.exports = __webpack_require__(134)(Array, 'Array', function(iterated, kind){
3612
+ this._t = toIObject(iterated); // target
3613
+ this._i = 0; // next index
3614
+ this._k = kind; // kind
3615
+ // 22.1.5.2.1 %ArrayIteratorPrototype%.next()
3616
+ }, function(){
3617
+ var O = this._t
3618
+ , kind = this._k
3619
+ , index = this._i++;
3620
+ if(!O || index >= O.length){
3621
+ this._t = undefined;
3622
+ return step(1);
3623
+ }
3624
+ if(kind == 'keys' )return step(0, index);
3625
+ if(kind == 'values')return step(0, O[index]);
3626
+ return step(0, [index, O[index]]);
3627
+ }, 'values');
3628
+
3629
+ // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
3630
+ Iterators.Arguments = Iterators.Array;
3631
+
3632
+ addToUnscopables('keys');
3633
+ addToUnscopables('values');
3634
+ addToUnscopables('entries');
3635
+
3636
+ /***/ },
3637
+ /* 184 */
3638
+ /***/ function(module, exports) {
3639
+
3640
+ module.exports = function(done, value){
3641
+ return {value: value, done: !!done};
3642
+ };
3643
+
3644
+ /***/ },
3645
+ /* 185 */
3646
+ /***/ function(module, exports, __webpack_require__) {
3647
+
3648
+ __webpack_require__(186)('Array');
3649
+
3650
+ /***/ },
3651
+ /* 186 */
3652
+ /***/ function(module, exports, __webpack_require__) {
3653
+
3654
+ 'use strict';
3655
+ var global = __webpack_require__(2)
3656
+ , dP = __webpack_require__(9)
3657
+ , DESCRIPTORS = __webpack_require__(4)
3658
+ , SPECIES = __webpack_require__(23)('species');
3659
+
3660
+ module.exports = function(KEY){
3661
+ var C = global[KEY];
3662
+ if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, {
3663
+ configurable: true,
3664
+ get: function(){ return this; }
3665
+ });
3666
+ };
3667
+
3668
+ /***/ },
3669
+ /* 187 */
3670
+ /***/ function(module, exports, __webpack_require__) {
3671
+
3672
+ var global = __webpack_require__(2)
3673
+ , inheritIfRequired = __webpack_require__(80)
3674
+ , dP = __webpack_require__(9).f
3675
+ , gOPN = __webpack_require__(48).f
3676
+ , isRegExp = __webpack_require__(128)
3677
+ , $flags = __webpack_require__(188)
3678
+ , $RegExp = global.RegExp
3679
+ , Base = $RegExp
3680
+ , proto = $RegExp.prototype
3681
+ , re1 = /a/g
3682
+ , re2 = /a/g
3683
+ // "new" creates a new object, old webkit buggy here
3684
+ , CORRECT_NEW = new $RegExp(re1) !== re1;
3685
+
3686
+ if(__webpack_require__(4) && (!CORRECT_NEW || __webpack_require__(5)(function(){
3687
+ re2[__webpack_require__(23)('match')] = false;
3688
+ // RegExp constructor can alter flags and IsRegExp works correct with @@match
3689
+ return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';
3690
+ }))){
3691
+ $RegExp = function RegExp(p, f){
3692
+ var tiRE = this instanceof $RegExp
3693
+ , piRE = isRegExp(p)
3694
+ , fiU = f === undefined;
3695
+ return !tiRE && piRE && p.constructor === $RegExp && fiU ? p
3696
+ : inheritIfRequired(CORRECT_NEW
3697
+ ? new Base(piRE && !fiU ? p.source : p, f)
3698
+ : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)
3699
+ , tiRE ? this : proto, $RegExp);
3700
+ };
3701
+ var proxy = function(key){
3702
+ key in $RegExp || dP($RegExp, key, {
3703
+ configurable: true,
3704
+ get: function(){ return Base[key]; },
3705
+ set: function(it){ Base[key] = it; }
3706
+ });
3707
+ };
3708
+ for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);
3709
+ proto.constructor = $RegExp;
3710
+ $RegExp.prototype = proto;
3711
+ __webpack_require__(16)(global, 'RegExp', $RegExp);
3712
+ }
3713
+
3714
+ __webpack_require__(186)('RegExp');
3715
+
3716
+ /***/ },
3717
+ /* 188 */
3718
+ /***/ function(module, exports, __webpack_require__) {
3719
+
3720
+ 'use strict';
3721
+ // 21.2.5.3 get RegExp.prototype.flags
3722
+ var anObject = __webpack_require__(10);
3723
+ module.exports = function(){
3724
+ var that = anObject(this)
3725
+ , result = '';
3726
+ if(that.global) result += 'g';
3727
+ if(that.ignoreCase) result += 'i';
3728
+ if(that.multiline) result += 'm';
3729
+ if(that.unicode) result += 'u';
3730
+ if(that.sticky) result += 'y';
3731
+ return result;
3732
+ };
3733
+
3734
+ /***/ },
3735
+ /* 189 */
3736
+ /***/ function(module, exports, __webpack_require__) {
3737
+
3738
+ 'use strict';
3739
+ __webpack_require__(190);
3740
+ var anObject = __webpack_require__(10)
3741
+ , $flags = __webpack_require__(188)
3742
+ , DESCRIPTORS = __webpack_require__(4)
3743
+ , TO_STRING = 'toString'
3744
+ , $toString = /./[TO_STRING];
3745
+
3746
+ var define = function(fn){
3747
+ __webpack_require__(16)(RegExp.prototype, TO_STRING, fn, true);
3748
+ };
3749
+
3750
+ // 21.2.5.14 RegExp.prototype.toString()
3751
+ if(__webpack_require__(5)(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){
3752
+ define(function toString(){
3753
+ var R = anObject(this);
3754
+ return '/'.concat(R.source, '/',
3755
+ 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);
3756
+ });
3757
+ // FF44- RegExp#toString has a wrong name
3758
+ } else if($toString.name != TO_STRING){
3759
+ define(function toString(){
3760
+ return $toString.call(this);
3761
+ });
3762
+ }
3763
+
3764
+ /***/ },
3765
+ /* 190 */
3766
+ /***/ function(module, exports, __webpack_require__) {
3767
+
3768
+ // 21.2.5.3 get RegExp.prototype.flags()
3769
+ if(__webpack_require__(4) && /./g.flags != 'g')__webpack_require__(9).f(RegExp.prototype, 'flags', {
3770
+ configurable: true,
3771
+ get: __webpack_require__(188)
3772
+ });
3773
+
3774
+ /***/ },
3775
+ /* 191 */
3776
+ /***/ function(module, exports, __webpack_require__) {
3777
+
3778
+ // @@match logic
3779
+ __webpack_require__(192)('match', 1, function(defined, MATCH, $match){
3780
+ // 21.1.3.11 String.prototype.match(regexp)
3781
+ return [function match(regexp){
3782
+ 'use strict';
3783
+ var O = defined(this)
3784
+ , fn = regexp == undefined ? undefined : regexp[MATCH];
3785
+ return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
3786
+ }, $match];
3787
+ });
3788
+
3789
+ /***/ },
3790
+ /* 192 */
3791
+ /***/ function(module, exports, __webpack_require__) {
3792
+
3793
+ 'use strict';
3794
+ var hide = __webpack_require__(8)
3795
+ , redefine = __webpack_require__(16)
3796
+ , fails = __webpack_require__(5)
3797
+ , defined = __webpack_require__(33)
3798
+ , wks = __webpack_require__(23);
3799
+
3800
+ module.exports = function(KEY, length, exec){
3801
+ var SYMBOL = wks(KEY)
3802
+ , fns = exec(defined, SYMBOL, ''[KEY])
3803
+ , strfn = fns[0]
3804
+ , rxfn = fns[1];
3805
+ if(fails(function(){
3806
+ var O = {};
3807
+ O[SYMBOL] = function(){ return 7; };
3808
+ return ''[KEY](O) != 7;
3809
+ })){
3810
+ redefine(String.prototype, KEY, strfn);
3811
+ hide(RegExp.prototype, SYMBOL, length == 2
3812
+ // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
3813
+ // 21.2.5.11 RegExp.prototype[@@split](string, limit)
3814
+ ? function(string, arg){ return rxfn.call(string, this, arg); }
3815
+ // 21.2.5.6 RegExp.prototype[@@match](string)
3816
+ // 21.2.5.9 RegExp.prototype[@@search](string)
3817
+ : function(string){ return rxfn.call(string, this); }
3818
+ );
3819
+ }
3820
+ };
3821
+
3822
+ /***/ },
3823
+ /* 193 */
3824
+ /***/ function(module, exports, __webpack_require__) {
3825
+
3826
+ // @@replace logic
3827
+ __webpack_require__(192)('replace', 2, function(defined, REPLACE, $replace){
3828
+ // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)
3829
+ return [function replace(searchValue, replaceValue){
3830
+ 'use strict';
3831
+ var O = defined(this)
3832
+ , fn = searchValue == undefined ? undefined : searchValue[REPLACE];
3833
+ return fn !== undefined
3834
+ ? fn.call(searchValue, O, replaceValue)
3835
+ : $replace.call(String(O), searchValue, replaceValue);
3836
+ }, $replace];
3837
+ });
3838
+
3839
+ /***/ },
3840
+ /* 194 */
3841
+ /***/ function(module, exports, __webpack_require__) {
3842
+
3843
+ // @@search logic
3844
+ __webpack_require__(192)('search', 1, function(defined, SEARCH, $search){
3845
+ // 21.1.3.15 String.prototype.search(regexp)
3846
+ return [function search(regexp){
3847
+ 'use strict';
3848
+ var O = defined(this)
3849
+ , fn = regexp == undefined ? undefined : regexp[SEARCH];
3850
+ return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
3851
+ }, $search];
3852
+ });
3853
+
3854
+ /***/ },
3855
+ /* 195 */
3856
+ /***/ function(module, exports, __webpack_require__) {
3857
+
3858
+ // @@split logic
3859
+ __webpack_require__(192)('split', 2, function(defined, SPLIT, $split){
3860
+ 'use strict';
3861
+ var isRegExp = __webpack_require__(128)
3862
+ , _split = $split
3863
+ , $push = [].push
3864
+ , $SPLIT = 'split'
3865
+ , LENGTH = 'length'
3866
+ , LAST_INDEX = 'lastIndex';
3867
+ if(
3868
+ 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||
3869
+ 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||
3870
+ 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||
3871
+ '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||
3872
+ '.'[$SPLIT](/()()/)[LENGTH] > 1 ||
3873
+ ''[$SPLIT](/.?/)[LENGTH]
3874
+ ){
3875
+ var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group
3876
+ // based on es5-shim implementation, need to rework it
3877
+ $split = function(separator, limit){
3878
+ var string = String(this);
3879
+ if(separator === undefined && limit === 0)return [];
3880
+ // If `separator` is not a regex, use native split
3881
+ if(!isRegExp(separator))return _split.call(string, separator, limit);
3882
+ var output = [];
3883
+ var flags = (separator.ignoreCase ? 'i' : '') +
3884
+ (separator.multiline ? 'm' : '') +
3885
+ (separator.unicode ? 'u' : '') +
3886
+ (separator.sticky ? 'y' : '');
3887
+ var lastLastIndex = 0;
3888
+ var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;
3889
+ // Make `global` and avoid `lastIndex` issues by working with a copy
3890
+ var separatorCopy = new RegExp(separator.source, flags + 'g');
3891
+ var separator2, match, lastIndex, lastLength, i;
3892
+ // Doesn't need flags gy, but they don't hurt
3893
+ if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
3894
+ while(match = separatorCopy.exec(string)){
3895
+ // `separatorCopy.lastIndex` is not reliable cross-browser
3896
+ lastIndex = match.index + match[0][LENGTH];
3897
+ if(lastIndex > lastLastIndex){
3898
+ output.push(string.slice(lastLastIndex, match.index));
3899
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG
3900
+ if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){
3901
+ for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined;
3902
+ });
3903
+ if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1));
3904
+ lastLength = match[0][LENGTH];
3905
+ lastLastIndex = lastIndex;
3906
+ if(output[LENGTH] >= splitLimit)break;
3907
+ }
3908
+ if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop
3909
+ }
3910
+ if(lastLastIndex === string[LENGTH]){
3911
+ if(lastLength || !separatorCopy.test(''))output.push('');
3912
+ } else output.push(string.slice(lastLastIndex));
3913
+ return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;
3914
+ };
3915
+ // Chakra, V8
3916
+ } else if('0'[$SPLIT](undefined, 0)[LENGTH]){
3917
+ $split = function(separator, limit){
3918
+ return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);
3919
+ };
3920
+ }
3921
+ // 21.1.3.17 String.prototype.split(separator, limit)
3922
+ return [function split(separator, limit){
3923
+ var O = defined(this)
3924
+ , fn = separator == undefined ? undefined : separator[SPLIT];
3925
+ return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);
3926
+ }, $split];
3927
+ });
3928
+
3929
+ /***/ },
3930
+ /* 196 */
3931
+ /***/ function(module, exports, __webpack_require__) {
3932
+
3933
+ 'use strict';
3934
+ var LIBRARY = __webpack_require__(26)
3935
+ , global = __webpack_require__(2)
3936
+ , ctx = __webpack_require__(18)
3937
+ , classof = __webpack_require__(73)
3938
+ , $export = __webpack_require__(6)
3939
+ , isObject = __webpack_require__(11)
3940
+ , aFunction = __webpack_require__(19)
3941
+ , anInstance = __webpack_require__(197)
3942
+ , forOf = __webpack_require__(198)
3943
+ , speciesConstructor = __webpack_require__(199)
3944
+ , task = __webpack_require__(200).set
3945
+ , microtask = __webpack_require__(201)()
3946
+ , PROMISE = 'Promise'
3947
+ , TypeError = global.TypeError
3948
+ , process = global.process
3949
+ , $Promise = global[PROMISE]
3950
+ , process = global.process
3951
+ , isNode = classof(process) == 'process'
3952
+ , empty = function(){ /* empty */ }
3953
+ , Internal, GenericPromiseCapability, Wrapper;
3954
+
3955
+ var USE_NATIVE = !!function(){
3956
+ try {
3957
+ // correct subclassing with @@species support
3958
+ var promise = $Promise.resolve(1)
3959
+ , FakePromise = (promise.constructor = {})[__webpack_require__(23)('species')] = function(exec){ exec(empty, empty); };
3960
+ // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
3961
+ return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;
3962
+ } catch(e){ /* empty */ }
3963
+ }();
3964
+
3965
+ // helpers
3966
+ var sameConstructor = function(a, b){
3967
+ // with library wrapper special case
3968
+ return a === b || a === $Promise && b === Wrapper;
3969
+ };
3970
+ var isThenable = function(it){
3971
+ var then;
3972
+ return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
3973
+ };
3974
+ var newPromiseCapability = function(C){
3975
+ return sameConstructor($Promise, C)
3976
+ ? new PromiseCapability(C)
3977
+ : new GenericPromiseCapability(C);
3978
+ };
3979
+ var PromiseCapability = GenericPromiseCapability = function(C){
3980
+ var resolve, reject;
3981
+ this.promise = new C(function($$resolve, $$reject){
3982
+ if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');
3983
+ resolve = $$resolve;
3984
+ reject = $$reject;
3985
+ });
3986
+ this.resolve = aFunction(resolve);
3987
+ this.reject = aFunction(reject);
3988
+ };
3989
+ var perform = function(exec){
3990
+ try {
3991
+ exec();
3992
+ } catch(e){
3993
+ return {error: e};
3994
+ }
3995
+ };
3996
+ var notify = function(promise, isReject){
3997
+ if(promise._n)return;
3998
+ promise._n = true;
3999
+ var chain = promise._c;
4000
+ microtask(function(){
4001
+ var value = promise._v
4002
+ , ok = promise._s == 1
4003
+ , i = 0;
4004
+ var run = function(reaction){
4005
+ var handler = ok ? reaction.ok : reaction.fail
4006
+ , resolve = reaction.resolve
4007
+ , reject = reaction.reject
4008
+ , domain = reaction.domain
4009
+ , result, then;
4010
+ try {
4011
+ if(handler){
4012
+ if(!ok){
4013
+ if(promise._h == 2)onHandleUnhandled(promise);
4014
+ promise._h = 1;
4015
+ }
4016
+ if(handler === true)result = value;
4017
+ else {
4018
+ if(domain)domain.enter();
4019
+ result = handler(value);
4020
+ if(domain)domain.exit();
4021
+ }
4022
+ if(result === reaction.promise){
4023
+ reject(TypeError('Promise-chain cycle'));
4024
+ } else if(then = isThenable(result)){
4025
+ then.call(result, resolve, reject);
4026
+ } else resolve(result);
4027
+ } else reject(value);
4028
+ } catch(e){
4029
+ reject(e);
4030
+ }
4031
+ };
4032
+ while(chain.length > i)run(chain[i++]); // variable length - can't use forEach
4033
+ promise._c = [];
4034
+ promise._n = false;
4035
+ if(isReject && !promise._h)onUnhandled(promise);
4036
+ });
4037
+ };
4038
+ var onUnhandled = function(promise){
4039
+ task.call(global, function(){
4040
+ var value = promise._v
4041
+ , abrupt, handler, console;
4042
+ if(isUnhandled(promise)){
4043
+ abrupt = perform(function(){
4044
+ if(isNode){
4045
+ process.emit('unhandledRejection', value, promise);
4046
+ } else if(handler = global.onunhandledrejection){
4047
+ handler({promise: promise, reason: value});
4048
+ } else if((console = global.console) && console.error){
4049
+ console.error('Unhandled promise rejection', value);
4050
+ }
4051
+ });
4052
+ // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
4053
+ promise._h = isNode || isUnhandled(promise) ? 2 : 1;
4054
+ } promise._a = undefined;
4055
+ if(abrupt)throw abrupt.error;
4056
+ });
4057
+ };
4058
+ var isUnhandled = function(promise){
4059
+ if(promise._h == 1)return false;
4060
+ var chain = promise._a || promise._c
4061
+ , i = 0
4062
+ , reaction;
4063
+ while(chain.length > i){
4064
+ reaction = chain[i++];
4065
+ if(reaction.fail || !isUnhandled(reaction.promise))return false;
4066
+ } return true;
4067
+ };
4068
+ var onHandleUnhandled = function(promise){
4069
+ task.call(global, function(){
4070
+ var handler;
4071
+ if(isNode){
4072
+ process.emit('rejectionHandled', promise);
4073
+ } else if(handler = global.onrejectionhandled){
4074
+ handler({promise: promise, reason: promise._v});
4075
+ }
4076
+ });
4077
+ };
4078
+ var $reject = function(value){
4079
+ var promise = this;
4080
+ if(promise._d)return;
4081
+ promise._d = true;
4082
+ promise = promise._w || promise; // unwrap
4083
+ promise._v = value;
4084
+ promise._s = 2;
4085
+ if(!promise._a)promise._a = promise._c.slice();
4086
+ notify(promise, true);
4087
+ };
4088
+ var $resolve = function(value){
4089
+ var promise = this
4090
+ , then;
4091
+ if(promise._d)return;
4092
+ promise._d = true;
4093
+ promise = promise._w || promise; // unwrap
4094
+ try {
4095
+ if(promise === value)throw TypeError("Promise can't be resolved itself");
4096
+ if(then = isThenable(value)){
4097
+ microtask(function(){
4098
+ var wrapper = {_w: promise, _d: false}; // wrap
4099
+ try {
4100
+ then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
4101
+ } catch(e){
4102
+ $reject.call(wrapper, e);
4103
+ }
4104
+ });
4105
+ } else {
4106
+ promise._v = value;
4107
+ promise._s = 1;
4108
+ notify(promise, false);
4109
+ }
4110
+ } catch(e){
4111
+ $reject.call({_w: promise, _d: false}, e); // wrap
4112
+ }
4113
+ };
4114
+
4115
+ // constructor polyfill
4116
+ if(!USE_NATIVE){
4117
+ // 25.4.3.1 Promise(executor)
4118
+ $Promise = function Promise(executor){
4119
+ anInstance(this, $Promise, PROMISE, '_h');
4120
+ aFunction(executor);
4121
+ Internal.call(this);
4122
+ try {
4123
+ executor(ctx($resolve, this, 1), ctx($reject, this, 1));
4124
+ } catch(err){
4125
+ $reject.call(this, err);
4126
+ }
4127
+ };
4128
+ Internal = function Promise(executor){
4129
+ this._c = []; // <- awaiting reactions
4130
+ this._a = undefined; // <- checked in isUnhandled reactions
4131
+ this._s = 0; // <- state
4132
+ this._d = false; // <- done
4133
+ this._v = undefined; // <- value
4134
+ this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
4135
+ this._n = false; // <- notify
4136
+ };
4137
+ Internal.prototype = __webpack_require__(202)($Promise.prototype, {
4138
+ // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
4139
+ then: function then(onFulfilled, onRejected){
4140
+ var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
4141
+ reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
4142
+ reaction.fail = typeof onRejected == 'function' && onRejected;
4143
+ reaction.domain = isNode ? process.domain : undefined;
4144
+ this._c.push(reaction);
4145
+ if(this._a)this._a.push(reaction);
4146
+ if(this._s)notify(this, false);
4147
+ return reaction.promise;
4148
+ },
4149
+ // 25.4.5.1 Promise.prototype.catch(onRejected)
4150
+ 'catch': function(onRejected){
4151
+ return this.then(undefined, onRejected);
4152
+ }
4153
+ });
4154
+ PromiseCapability = function(){
4155
+ var promise = new Internal;
4156
+ this.promise = promise;
4157
+ this.resolve = ctx($resolve, promise, 1);
4158
+ this.reject = ctx($reject, promise, 1);
4159
+ };
4160
+ }
4161
+
4162
+ $export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise});
4163
+ __webpack_require__(22)($Promise, PROMISE);
4164
+ __webpack_require__(186)(PROMISE);
4165
+ Wrapper = __webpack_require__(7)[PROMISE];
4166
+
4167
+ // statics
4168
+ $export($export.S + $export.F * !USE_NATIVE, PROMISE, {
4169
+ // 25.4.4.5 Promise.reject(r)
4170
+ reject: function reject(r){
4171
+ var capability = newPromiseCapability(this)
4172
+ , $$reject = capability.reject;
4173
+ $$reject(r);
4174
+ return capability.promise;
4175
+ }
4176
+ });
4177
+ $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
4178
+ // 25.4.4.6 Promise.resolve(x)
4179
+ resolve: function resolve(x){
4180
+ // instanceof instead of internal slot check because we should fix it without replacement native Promise core
4181
+ if(x instanceof $Promise && sameConstructor(x.constructor, this))return x;
4182
+ var capability = newPromiseCapability(this)
4183
+ , $$resolve = capability.resolve;
4184
+ $$resolve(x);
4185
+ return capability.promise;
4186
+ }
4187
+ });
4188
+ $export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(157)(function(iter){
4189
+ $Promise.all(iter)['catch'](empty);
4190
+ })), PROMISE, {
4191
+ // 25.4.4.1 Promise.all(iterable)
4192
+ all: function all(iterable){
4193
+ var C = this
4194
+ , capability = newPromiseCapability(C)
4195
+ , resolve = capability.resolve
4196
+ , reject = capability.reject;
4197
+ var abrupt = perform(function(){
4198
+ var values = []
4199
+ , index = 0
4200
+ , remaining = 1;
4201
+ forOf(iterable, false, function(promise){
4202
+ var $index = index++
4203
+ , alreadyCalled = false;
4204
+ values.push(undefined);
4205
+ remaining++;
4206
+ C.resolve(promise).then(function(value){
4207
+ if(alreadyCalled)return;
4208
+ alreadyCalled = true;
4209
+ values[$index] = value;
4210
+ --remaining || resolve(values);
4211
+ }, reject);
4212
+ });
4213
+ --remaining || resolve(values);
4214
+ });
4215
+ if(abrupt)reject(abrupt.error);
4216
+ return capability.promise;
4217
+ },
4218
+ // 25.4.4.4 Promise.race(iterable)
4219
+ race: function race(iterable){
4220
+ var C = this
4221
+ , capability = newPromiseCapability(C)
4222
+ , reject = capability.reject;
4223
+ var abrupt = perform(function(){
4224
+ forOf(iterable, false, function(promise){
4225
+ C.resolve(promise).then(capability.resolve, reject);
4226
+ });
4227
+ });
4228
+ if(abrupt)reject(abrupt.error);
4229
+ return capability.promise;
4230
+ }
4231
+ });
4232
+
4233
+ /***/ },
4234
+ /* 197 */
4235
+ /***/ function(module, exports) {
4236
+
4237
+ module.exports = function(it, Constructor, name, forbiddenField){
4238
+ if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){
4239
+ throw TypeError(name + ': incorrect invocation!');
4240
+ } return it;
4241
+ };
4242
+
4243
+ /***/ },
4244
+ /* 198 */
4245
+ /***/ function(module, exports, __webpack_require__) {
4246
+
4247
+ var ctx = __webpack_require__(18)
4248
+ , call = __webpack_require__(153)
4249
+ , isArrayIter = __webpack_require__(154)
4250
+ , anObject = __webpack_require__(10)
4251
+ , toLength = __webpack_require__(35)
4252
+ , getIterFn = __webpack_require__(156)
4253
+ , BREAK = {}
4254
+ , RETURN = {};
4255
+ var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){
4256
+ var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)
4257
+ , f = ctx(fn, that, entries ? 2 : 1)
4258
+ , index = 0
4259
+ , length, step, iterator, result;
4260
+ if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');
4261
+ // fast case for arrays with default iterator
4262
+ if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){
4263
+ result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
4264
+ if(result === BREAK || result === RETURN)return result;
4265
+ } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){
4266
+ result = call(iterator, f, step.value, entries);
4267
+ if(result === BREAK || result === RETURN)return result;
4268
+ }
4269
+ };
4270
+ exports.BREAK = BREAK;
4271
+ exports.RETURN = RETURN;
4272
+
4273
+ /***/ },
4274
+ /* 199 */
4275
+ /***/ function(module, exports, __webpack_require__) {
4276
+
4277
+ // 7.3.20 SpeciesConstructor(O, defaultConstructor)
4278
+ var anObject = __webpack_require__(10)
4279
+ , aFunction = __webpack_require__(19)
4280
+ , SPECIES = __webpack_require__(23)('species');
4281
+ module.exports = function(O, D){
4282
+ var C = anObject(O).constructor, S;
4283
+ return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
4284
+ };
4285
+
4286
+ /***/ },
4287
+ /* 200 */
4288
+ /***/ function(module, exports, __webpack_require__) {
4289
+
4290
+ var ctx = __webpack_require__(18)
4291
+ , invoke = __webpack_require__(76)
4292
+ , html = __webpack_require__(46)
4293
+ , cel = __webpack_require__(13)
4294
+ , global = __webpack_require__(2)
4295
+ , process = global.process
4296
+ , setTask = global.setImmediate
4297
+ , clearTask = global.clearImmediate
4298
+ , MessageChannel = global.MessageChannel
4299
+ , counter = 0
4300
+ , queue = {}
4301
+ , ONREADYSTATECHANGE = 'onreadystatechange'
4302
+ , defer, channel, port;
4303
+ var run = function(){
4304
+ var id = +this;
4305
+ if(queue.hasOwnProperty(id)){
4306
+ var fn = queue[id];
4307
+ delete queue[id];
4308
+ fn();
4309
+ }
4310
+ };
4311
+ var listener = function(event){
4312
+ run.call(event.data);
4313
+ };
4314
+ // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
4315
+ if(!setTask || !clearTask){
4316
+ setTask = function setImmediate(fn){
4317
+ var args = [], i = 1;
4318
+ while(arguments.length > i)args.push(arguments[i++]);
4319
+ queue[++counter] = function(){
4320
+ invoke(typeof fn == 'function' ? fn : Function(fn), args);
4321
+ };
4322
+ defer(counter);
4323
+ return counter;
4324
+ };
4325
+ clearTask = function clearImmediate(id){
4326
+ delete queue[id];
4327
+ };
4328
+ // Node.js 0.8-
4329
+ if(__webpack_require__(32)(process) == 'process'){
4330
+ defer = function(id){
4331
+ process.nextTick(ctx(run, id, 1));
4332
+ };
4333
+ // Browsers with MessageChannel, includes WebWorkers
4334
+ } else if(MessageChannel){
4335
+ channel = new MessageChannel;
4336
+ port = channel.port2;
4337
+ channel.port1.onmessage = listener;
4338
+ defer = ctx(port.postMessage, port, 1);
4339
+ // Browsers with postMessage, skip WebWorkers
4340
+ // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
4341
+ } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){
4342
+ defer = function(id){
4343
+ global.postMessage(id + '', '*');
4344
+ };
4345
+ global.addEventListener('message', listener, false);
4346
+ // IE8-
4347
+ } else if(ONREADYSTATECHANGE in cel('script')){
4348
+ defer = function(id){
4349
+ html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){
4350
+ html.removeChild(this);
4351
+ run.call(id);
4352
+ };
4353
+ };
4354
+ // Rest old browsers
4355
+ } else {
4356
+ defer = function(id){
4357
+ setTimeout(ctx(run, id, 1), 0);
4358
+ };
4359
+ }
4360
+ }
4361
+ module.exports = {
4362
+ set: setTask,
4363
+ clear: clearTask
4364
+ };
4365
+
4366
+ /***/ },
4367
+ /* 201 */
4368
+ /***/ function(module, exports, __webpack_require__) {
4369
+
4370
+ var global = __webpack_require__(2)
4371
+ , macrotask = __webpack_require__(200).set
4372
+ , Observer = global.MutationObserver || global.WebKitMutationObserver
4373
+ , process = global.process
4374
+ , Promise = global.Promise
4375
+ , isNode = __webpack_require__(32)(process) == 'process';
4376
+
4377
+ module.exports = function(){
4378
+ var head, last, notify;
4379
+
4380
+ var flush = function(){
4381
+ var parent, fn;
4382
+ if(isNode && (parent = process.domain))parent.exit();
4383
+ while(head){
4384
+ fn = head.fn;
4385
+ head = head.next;
4386
+ try {
4387
+ fn();
4388
+ } catch(e){
4389
+ if(head)notify();
4390
+ else last = undefined;
4391
+ throw e;
4392
+ }
4393
+ } last = undefined;
4394
+ if(parent)parent.enter();
4395
+ };
4396
+
4397
+ // Node.js
4398
+ if(isNode){
4399
+ notify = function(){
4400
+ process.nextTick(flush);
4401
+ };
4402
+ // browsers with MutationObserver
4403
+ } else if(Observer){
4404
+ var toggle = true
4405
+ , node = document.createTextNode('');
4406
+ new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new
4407
+ notify = function(){
4408
+ node.data = toggle = !toggle;
4409
+ };
4410
+ // environments with maybe non-completely correct, but existent Promise
4411
+ } else if(Promise && Promise.resolve){
4412
+ var promise = Promise.resolve();
4413
+ notify = function(){
4414
+ promise.then(flush);
4415
+ };
4416
+ // for other environments - macrotask based on:
4417
+ // - setImmediate
4418
+ // - MessageChannel
4419
+ // - window.postMessag
4420
+ // - onreadystatechange
4421
+ // - setTimeout
4422
+ } else {
4423
+ notify = function(){
4424
+ // strange IE + webpack dev server bug - use .call(global)
4425
+ macrotask.call(global, flush);
4426
+ };
4427
+ }
4428
+
4429
+ return function(fn){
4430
+ var task = {fn: fn, next: undefined};
4431
+ if(last)last.next = task;
4432
+ if(!head){
4433
+ head = task;
4434
+ notify();
4435
+ } last = task;
4436
+ };
4437
+ };
4438
+
4439
+ /***/ },
4440
+ /* 202 */
4441
+ /***/ function(module, exports, __webpack_require__) {
4442
+
4443
+ var redefine = __webpack_require__(16);
4444
+ module.exports = function(target, src, safe){
4445
+ for(var key in src)redefine(target, key, src[key], safe);
4446
+ return target;
4447
+ };
4448
+
4449
+ /***/ },
4450
+ /* 203 */
4451
+ /***/ function(module, exports, __webpack_require__) {
4452
+
4453
+ 'use strict';
4454
+ var strong = __webpack_require__(204);
4455
+
4456
+ // 23.1 Map Objects
4457
+ module.exports = __webpack_require__(205)('Map', function(get){
4458
+ return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
4459
+ }, {
4460
+ // 23.1.3.6 Map.prototype.get(key)
4461
+ get: function get(key){
4462
+ var entry = strong.getEntry(this, key);
4463
+ return entry && entry.v;
4464
+ },
4465
+ // 23.1.3.9 Map.prototype.set(key, value)
4466
+ set: function set(key, value){
4467
+ return strong.def(this, key === 0 ? 0 : key, value);
4468
+ }
4469
+ }, strong, true);
4470
+
4471
+ /***/ },
4472
+ /* 204 */
4473
+ /***/ function(module, exports, __webpack_require__) {
4474
+
4475
+ 'use strict';
4476
+ var dP = __webpack_require__(9).f
4477
+ , create = __webpack_require__(44)
4478
+ , redefineAll = __webpack_require__(202)
4479
+ , ctx = __webpack_require__(18)
4480
+ , anInstance = __webpack_require__(197)
4481
+ , defined = __webpack_require__(33)
4482
+ , forOf = __webpack_require__(198)
4483
+ , $iterDefine = __webpack_require__(134)
4484
+ , step = __webpack_require__(184)
4485
+ , setSpecies = __webpack_require__(186)
4486
+ , DESCRIPTORS = __webpack_require__(4)
4487
+ , fastKey = __webpack_require__(20).fastKey
4488
+ , SIZE = DESCRIPTORS ? '_s' : 'size';
4489
+
4490
+ var getEntry = function(that, key){
4491
+ // fast case
4492
+ var index = fastKey(key), entry;
4493
+ if(index !== 'F')return that._i[index];
4494
+ // frozen object case
4495
+ for(entry = that._f; entry; entry = entry.n){
4496
+ if(entry.k == key)return entry;
4497
+ }
4498
+ };
4499
+
4500
+ module.exports = {
4501
+ getConstructor: function(wrapper, NAME, IS_MAP, ADDER){
4502
+ var C = wrapper(function(that, iterable){
4503
+ anInstance(that, C, NAME, '_i');
4504
+ that._i = create(null); // index
4505
+ that._f = undefined; // first entry
4506
+ that._l = undefined; // last entry
4507
+ that[SIZE] = 0; // size
4508
+ if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
4509
+ });
4510
+ redefineAll(C.prototype, {
4511
+ // 23.1.3.1 Map.prototype.clear()
4512
+ // 23.2.3.2 Set.prototype.clear()
4513
+ clear: function clear(){
4514
+ for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){
4515
+ entry.r = true;
4516
+ if(entry.p)entry.p = entry.p.n = undefined;
4517
+ delete data[entry.i];
4518
+ }
4519
+ that._f = that._l = undefined;
4520
+ that[SIZE] = 0;
4521
+ },
4522
+ // 23.1.3.3 Map.prototype.delete(key)
4523
+ // 23.2.3.4 Set.prototype.delete(value)
4524
+ 'delete': function(key){
4525
+ var that = this
4526
+ , entry = getEntry(that, key);
4527
+ if(entry){
4528
+ var next = entry.n
4529
+ , prev = entry.p;
4530
+ delete that._i[entry.i];
4531
+ entry.r = true;
4532
+ if(prev)prev.n = next;
4533
+ if(next)next.p = prev;
4534
+ if(that._f == entry)that._f = next;
4535
+ if(that._l == entry)that._l = prev;
4536
+ that[SIZE]--;
4537
+ } return !!entry;
4538
+ },
4539
+ // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
4540
+ // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
4541
+ forEach: function forEach(callbackfn /*, that = undefined */){
4542
+ anInstance(this, C, 'forEach');
4543
+ var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)
4544
+ , entry;
4545
+ while(entry = entry ? entry.n : this._f){
4546
+ f(entry.v, entry.k, this);
4547
+ // revert to the last existing entry
4548
+ while(entry && entry.r)entry = entry.p;
4549
+ }
4550
+ },
4551
+ // 23.1.3.7 Map.prototype.has(key)
4552
+ // 23.2.3.7 Set.prototype.has(value)
4553
+ has: function has(key){
4554
+ return !!getEntry(this, key);
4555
+ }
4556
+ });
4557
+ if(DESCRIPTORS)dP(C.prototype, 'size', {
4558
+ get: function(){
4559
+ return defined(this[SIZE]);
4560
+ }
4561
+ });
4562
+ return C;
4563
+ },
4564
+ def: function(that, key, value){
4565
+ var entry = getEntry(that, key)
4566
+ , prev, index;
4567
+ // change existing entry
4568
+ if(entry){
4569
+ entry.v = value;
4570
+ // create new entry
4571
+ } else {
4572
+ that._l = entry = {
4573
+ i: index = fastKey(key, true), // <- index
4574
+ k: key, // <- key
4575
+ v: value, // <- value
4576
+ p: prev = that._l, // <- previous entry
4577
+ n: undefined, // <- next entry
4578
+ r: false // <- removed
4579
+ };
4580
+ if(!that._f)that._f = entry;
4581
+ if(prev)prev.n = entry;
4582
+ that[SIZE]++;
4583
+ // add to index
4584
+ if(index !== 'F')that._i[index] = entry;
4585
+ } return that;
4586
+ },
4587
+ getEntry: getEntry,
4588
+ setStrong: function(C, NAME, IS_MAP){
4589
+ // add .keys, .values, .entries, [@@iterator]
4590
+ // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
4591
+ $iterDefine(C, NAME, function(iterated, kind){
4592
+ this._t = iterated; // target
4593
+ this._k = kind; // kind
4594
+ this._l = undefined; // previous
4595
+ }, function(){
4596
+ var that = this
4597
+ , kind = that._k
4598
+ , entry = that._l;
4599
+ // revert to the last existing entry
4600
+ while(entry && entry.r)entry = entry.p;
4601
+ // get next entry
4602
+ if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){
4603
+ // or finish the iteration
4604
+ that._t = undefined;
4605
+ return step(1);
4606
+ }
4607
+ // return step by kind
4608
+ if(kind == 'keys' )return step(0, entry.k);
4609
+ if(kind == 'values')return step(0, entry.v);
4610
+ return step(0, [entry.k, entry.v]);
4611
+ }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);
4612
+
4613
+ // add [@@species], 23.1.2.2, 23.2.2.2
4614
+ setSpecies(NAME);
4615
+ }
4616
+ };
4617
+
4618
+ /***/ },
4619
+ /* 205 */
4620
+ /***/ function(module, exports, __webpack_require__) {
4621
+
4622
+ 'use strict';
4623
+ var global = __webpack_require__(2)
4624
+ , $export = __webpack_require__(6)
4625
+ , redefine = __webpack_require__(16)
4626
+ , redefineAll = __webpack_require__(202)
4627
+ , meta = __webpack_require__(20)
4628
+ , forOf = __webpack_require__(198)
4629
+ , anInstance = __webpack_require__(197)
4630
+ , isObject = __webpack_require__(11)
4631
+ , fails = __webpack_require__(5)
4632
+ , $iterDetect = __webpack_require__(157)
4633
+ , setToStringTag = __webpack_require__(22)
4634
+ , inheritIfRequired = __webpack_require__(80);
4635
+
4636
+ module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){
4637
+ var Base = global[NAME]
4638
+ , C = Base
4639
+ , ADDER = IS_MAP ? 'set' : 'add'
4640
+ , proto = C && C.prototype
4641
+ , O = {};
4642
+ var fixMethod = function(KEY){
4643
+ var fn = proto[KEY];
4644
+ redefine(proto, KEY,
4645
+ KEY == 'delete' ? function(a){
4646
+ return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
4647
+ } : KEY == 'has' ? function has(a){
4648
+ return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
4649
+ } : KEY == 'get' ? function get(a){
4650
+ return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
4651
+ } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }
4652
+ : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }
4653
+ );
4654
+ };
4655
+ if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){
4656
+ new C().entries().next();
4657
+ }))){
4658
+ // create collection constructor
4659
+ C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
4660
+ redefineAll(C.prototype, methods);
4661
+ meta.NEED = true;
4662
+ } else {
4663
+ var instance = new C
4664
+ // early implementations not supports chaining
4665
+ , HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance
4666
+ // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
4667
+ , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })
4668
+ // most early implementations doesn't supports iterables, most modern - not close it correctly
4669
+ , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new
4670
+ // for early implementations -0 and +0 not the same
4671
+ , BUGGY_ZERO = !IS_WEAK && fails(function(){
4672
+ // V8 ~ Chromium 42- fails only with 5+ elements
4673
+ var $instance = new C()
4674
+ , index = 5;
4675
+ while(index--)$instance[ADDER](index, index);
4676
+ return !$instance.has(-0);
4677
+ });
4678
+ if(!ACCEPT_ITERABLES){
4679
+ C = wrapper(function(target, iterable){
4680
+ anInstance(target, C, NAME);
4681
+ var that = inheritIfRequired(new Base, target, C);
4682
+ if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
4683
+ return that;
4684
+ });
4685
+ C.prototype = proto;
4686
+ proto.constructor = C;
4687
+ }
4688
+ if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){
4689
+ fixMethod('delete');
4690
+ fixMethod('has');
4691
+ IS_MAP && fixMethod('get');
4692
+ }
4693
+ if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);
4694
+ // weak collections should not contains .clear method
4695
+ if(IS_WEAK && proto.clear)delete proto.clear;
4696
+ }
4697
+
4698
+ setToStringTag(C, NAME);
4699
+
4700
+ O[NAME] = C;
4701
+ $export($export.G + $export.W + $export.F * (C != Base), O);
4702
+
4703
+ if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);
4704
+
4705
+ return C;
4706
+ };
4707
+
4708
+ /***/ },
4709
+ /* 206 */
4710
+ /***/ function(module, exports, __webpack_require__) {
4711
+
4712
+ 'use strict';
4713
+ var strong = __webpack_require__(204);
4714
+
4715
+ // 23.2 Set Objects
4716
+ module.exports = __webpack_require__(205)('Set', function(get){
4717
+ return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
4718
+ }, {
4719
+ // 23.2.3.1 Set.prototype.add(value)
4720
+ add: function add(value){
4721
+ return strong.def(this, value = value === 0 ? 0 : value, value);
4722
+ }
4723
+ }, strong);
4724
+
4725
+ /***/ },
4726
+ /* 207 */
4727
+ /***/ function(module, exports, __webpack_require__) {
4728
+
4729
+ 'use strict';
4730
+ var each = __webpack_require__(164)(0)
4731
+ , redefine = __webpack_require__(16)
4732
+ , meta = __webpack_require__(20)
4733
+ , assign = __webpack_require__(67)
4734
+ , weak = __webpack_require__(208)
4735
+ , isObject = __webpack_require__(11)
4736
+ , getWeak = meta.getWeak
4737
+ , isExtensible = Object.isExtensible
4738
+ , uncaughtFrozenStore = weak.ufstore
4739
+ , tmp = {}
4740
+ , InternalMap;
4741
+
4742
+ var wrapper = function(get){
4743
+ return function WeakMap(){
4744
+ return get(this, arguments.length > 0 ? arguments[0] : undefined);
4745
+ };
4746
+ };
4747
+
4748
+ var methods = {
4749
+ // 23.3.3.3 WeakMap.prototype.get(key)
4750
+ get: function get(key){
4751
+ if(isObject(key)){
4752
+ var data = getWeak(key);
4753
+ if(data === true)return uncaughtFrozenStore(this).get(key);
4754
+ return data ? data[this._i] : undefined;
4755
+ }
4756
+ },
4757
+ // 23.3.3.5 WeakMap.prototype.set(key, value)
4758
+ set: function set(key, value){
4759
+ return weak.def(this, key, value);
4760
+ }
4761
+ };
4762
+
4763
+ // 23.3 WeakMap Objects
4764
+ var $WeakMap = module.exports = __webpack_require__(205)('WeakMap', wrapper, methods, weak, true, true);
4765
+
4766
+ // IE11 WeakMap frozen keys fix
4767
+ if(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){
4768
+ InternalMap = weak.getConstructor(wrapper);
4769
+ assign(InternalMap.prototype, methods);
4770
+ meta.NEED = true;
4771
+ each(['delete', 'has', 'get', 'set'], function(key){
4772
+ var proto = $WeakMap.prototype
4773
+ , method = proto[key];
4774
+ redefine(proto, key, function(a, b){
4775
+ // store frozen objects on internal weakmap shim
4776
+ if(isObject(a) && !isExtensible(a)){
4777
+ if(!this._f)this._f = new InternalMap;
4778
+ var result = this._f[key](a, b);
4779
+ return key == 'set' ? this : result;
4780
+ // store all the rest on native weakmap
4781
+ } return method.call(this, a, b);
4782
+ });
4783
+ });
4784
+ }
4785
+
4786
+ /***/ },
4787
+ /* 208 */
4788
+ /***/ function(module, exports, __webpack_require__) {
4789
+
4790
+ 'use strict';
4791
+ var redefineAll = __webpack_require__(202)
4792
+ , getWeak = __webpack_require__(20).getWeak
4793
+ , anObject = __webpack_require__(10)
4794
+ , isObject = __webpack_require__(11)
4795
+ , anInstance = __webpack_require__(197)
4796
+ , forOf = __webpack_require__(198)
4797
+ , createArrayMethod = __webpack_require__(164)
4798
+ , $has = __webpack_require__(3)
4799
+ , arrayFind = createArrayMethod(5)
4800
+ , arrayFindIndex = createArrayMethod(6)
4801
+ , id = 0;
4802
+
4803
+ // fallback for uncaught frozen keys
4804
+ var uncaughtFrozenStore = function(that){
4805
+ return that._l || (that._l = new UncaughtFrozenStore);
4806
+ };
4807
+ var UncaughtFrozenStore = function(){
4808
+ this.a = [];
4809
+ };
4810
+ var findUncaughtFrozen = function(store, key){
4811
+ return arrayFind(store.a, function(it){
4812
+ return it[0] === key;
4813
+ });
4814
+ };
4815
+ UncaughtFrozenStore.prototype = {
4816
+ get: function(key){
4817
+ var entry = findUncaughtFrozen(this, key);
4818
+ if(entry)return entry[1];
4819
+ },
4820
+ has: function(key){
4821
+ return !!findUncaughtFrozen(this, key);
4822
+ },
4823
+ set: function(key, value){
4824
+ var entry = findUncaughtFrozen(this, key);
4825
+ if(entry)entry[1] = value;
4826
+ else this.a.push([key, value]);
4827
+ },
4828
+ 'delete': function(key){
4829
+ var index = arrayFindIndex(this.a, function(it){
4830
+ return it[0] === key;
4831
+ });
4832
+ if(~index)this.a.splice(index, 1);
4833
+ return !!~index;
4834
+ }
4835
+ };
4836
+
4837
+ module.exports = {
4838
+ getConstructor: function(wrapper, NAME, IS_MAP, ADDER){
4839
+ var C = wrapper(function(that, iterable){
4840
+ anInstance(that, C, NAME, '_i');
4841
+ that._i = id++; // collection id
4842
+ that._l = undefined; // leak store for uncaught frozen objects
4843
+ if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
4844
+ });
4845
+ redefineAll(C.prototype, {
4846
+ // 23.3.3.2 WeakMap.prototype.delete(key)
4847
+ // 23.4.3.3 WeakSet.prototype.delete(value)
4848
+ 'delete': function(key){
4849
+ if(!isObject(key))return false;
4850
+ var data = getWeak(key);
4851
+ if(data === true)return uncaughtFrozenStore(this)['delete'](key);
4852
+ return data && $has(data, this._i) && delete data[this._i];
4853
+ },
4854
+ // 23.3.3.4 WeakMap.prototype.has(key)
4855
+ // 23.4.3.4 WeakSet.prototype.has(value)
4856
+ has: function has(key){
4857
+ if(!isObject(key))return false;
4858
+ var data = getWeak(key);
4859
+ if(data === true)return uncaughtFrozenStore(this).has(key);
4860
+ return data && $has(data, this._i);
4861
+ }
4862
+ });
4863
+ return C;
4864
+ },
4865
+ def: function(that, key, value){
4866
+ var data = getWeak(anObject(key), true);
4867
+ if(data === true)uncaughtFrozenStore(that).set(key, value);
4868
+ else data[that._i] = value;
4869
+ return that;
4870
+ },
4871
+ ufstore: uncaughtFrozenStore
4872
+ };
4873
+
4874
+ /***/ },
4875
+ /* 209 */
4876
+ /***/ function(module, exports, __webpack_require__) {
4877
+
4878
+ 'use strict';
4879
+ var weak = __webpack_require__(208);
4880
+
4881
+ // 23.4 WeakSet Objects
4882
+ __webpack_require__(205)('WeakSet', function(get){
4883
+ return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
4884
+ }, {
4885
+ // 23.4.3.1 WeakSet.prototype.add(value)
4886
+ add: function add(value){
4887
+ return weak.def(this, value, true);
4888
+ }
4889
+ }, weak, false, true);
4890
+
4891
+ /***/ },
4892
+ /* 210 */
4893
+ /***/ function(module, exports, __webpack_require__) {
4894
+
4895
+ // 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
4896
+ var $export = __webpack_require__(6)
4897
+ , aFunction = __webpack_require__(19)
4898
+ , anObject = __webpack_require__(10)
4899
+ , rApply = (__webpack_require__(2).Reflect || {}).apply
4900
+ , fApply = Function.apply;
4901
+ // MS Edge argumentsList argument is optional
4902
+ $export($export.S + $export.F * !__webpack_require__(5)(function(){
4903
+ rApply(function(){});
4904
+ }), 'Reflect', {
4905
+ apply: function apply(target, thisArgument, argumentsList){
4906
+ var T = aFunction(target)
4907
+ , L = anObject(argumentsList);
4908
+ return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
4909
+ }
4910
+ });
4911
+
4912
+ /***/ },
4913
+ /* 211 */
4914
+ /***/ function(module, exports, __webpack_require__) {
4915
+
4916
+ // 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
4917
+ var $export = __webpack_require__(6)
4918
+ , create = __webpack_require__(44)
4919
+ , aFunction = __webpack_require__(19)
4920
+ , anObject = __webpack_require__(10)
4921
+ , isObject = __webpack_require__(11)
4922
+ , fails = __webpack_require__(5)
4923
+ , bind = __webpack_require__(75)
4924
+ , rConstruct = (__webpack_require__(2).Reflect || {}).construct;
4925
+
4926
+ // MS Edge supports only 2 arguments and argumentsList argument is optional
4927
+ // FF Nightly sets third argument as `new.target`, but does not create `this` from it
4928
+ var NEW_TARGET_BUG = fails(function(){
4929
+ function F(){}
4930
+ return !(rConstruct(function(){}, [], F) instanceof F);
4931
+ });
4932
+ var ARGS_BUG = !fails(function(){
4933
+ rConstruct(function(){});
4934
+ });
4935
+
4936
+ $export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
4937
+ construct: function construct(Target, args /*, newTarget*/){
4938
+ aFunction(Target);
4939
+ anObject(args);
4940
+ var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
4941
+ if(ARGS_BUG && !NEW_TARGET_BUG)return rConstruct(Target, args, newTarget);
4942
+ if(Target == newTarget){
4943
+ // w/o altered newTarget, optimization for 0-4 arguments
4944
+ switch(args.length){
4945
+ case 0: return new Target;
4946
+ case 1: return new Target(args[0]);
4947
+ case 2: return new Target(args[0], args[1]);
4948
+ case 3: return new Target(args[0], args[1], args[2]);
4949
+ case 4: return new Target(args[0], args[1], args[2], args[3]);
4950
+ }
4951
+ // w/o altered newTarget, lot of arguments case
4952
+ var $args = [null];
4953
+ $args.push.apply($args, args);
4954
+ return new (bind.apply(Target, $args));
4955
+ }
4956
+ // with altered newTarget, not support built-in constructors
4957
+ var proto = newTarget.prototype
4958
+ , instance = create(isObject(proto) ? proto : Object.prototype)
4959
+ , result = Function.apply.call(Target, instance, args);
4960
+ return isObject(result) ? result : instance;
4961
+ }
4962
+ });
4963
+
4964
+ /***/ },
4965
+ /* 212 */
4966
+ /***/ function(module, exports, __webpack_require__) {
4967
+
4968
+ // 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
4969
+ var dP = __webpack_require__(9)
4970
+ , $export = __webpack_require__(6)
4971
+ , anObject = __webpack_require__(10)
4972
+ , toPrimitive = __webpack_require__(14);
4973
+
4974
+ // MS Edge has broken Reflect.defineProperty - throwing instead of returning false
4975
+ $export($export.S + $export.F * __webpack_require__(5)(function(){
4976
+ Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2});
4977
+ }), 'Reflect', {
4978
+ defineProperty: function defineProperty(target, propertyKey, attributes){
4979
+ anObject(target);
4980
+ propertyKey = toPrimitive(propertyKey, true);
4981
+ anObject(attributes);
4982
+ try {
4983
+ dP.f(target, propertyKey, attributes);
4984
+ return true;
4985
+ } catch(e){
4986
+ return false;
4987
+ }
4988
+ }
4989
+ });
4990
+
4991
+ /***/ },
4992
+ /* 213 */
4993
+ /***/ function(module, exports, __webpack_require__) {
4994
+
4995
+ // 26.1.4 Reflect.deleteProperty(target, propertyKey)
4996
+ var $export = __webpack_require__(6)
4997
+ , gOPD = __webpack_require__(49).f
4998
+ , anObject = __webpack_require__(10);
4999
+
5000
+ $export($export.S, 'Reflect', {
5001
+ deleteProperty: function deleteProperty(target, propertyKey){
5002
+ var desc = gOPD(anObject(target), propertyKey);
5003
+ return desc && !desc.configurable ? false : delete target[propertyKey];
5004
+ }
5005
+ });
5006
+
5007
+ /***/ },
5008
+ /* 214 */
5009
+ /***/ function(module, exports, __webpack_require__) {
5010
+
5011
+ 'use strict';
5012
+ // 26.1.5 Reflect.enumerate(target)
5013
+ var $export = __webpack_require__(6)
5014
+ , anObject = __webpack_require__(10);
5015
+ var Enumerate = function(iterated){
5016
+ this._t = anObject(iterated); // target
5017
+ this._i = 0; // next index
5018
+ var keys = this._k = [] // keys
5019
+ , key;
5020
+ for(key in iterated)keys.push(key);
5021
+ };
5022
+ __webpack_require__(136)(Enumerate, 'Object', function(){
5023
+ var that = this
5024
+ , keys = that._k
5025
+ , key;
5026
+ do {
5027
+ if(that._i >= keys.length)return {value: undefined, done: true};
5028
+ } while(!((key = keys[that._i++]) in that._t));
5029
+ return {value: key, done: false};
5030
+ });
5031
+
5032
+ $export($export.S, 'Reflect', {
5033
+ enumerate: function enumerate(target){
5034
+ return new Enumerate(target);
5035
+ }
5036
+ });
5037
+
5038
+ /***/ },
5039
+ /* 215 */
5040
+ /***/ function(module, exports, __webpack_require__) {
5041
+
5042
+ // 26.1.6 Reflect.get(target, propertyKey [, receiver])
5043
+ var gOPD = __webpack_require__(49)
5044
+ , getPrototypeOf = __webpack_require__(57)
5045
+ , has = __webpack_require__(3)
5046
+ , $export = __webpack_require__(6)
5047
+ , isObject = __webpack_require__(11)
5048
+ , anObject = __webpack_require__(10);
5049
+
5050
+ function get(target, propertyKey/*, receiver*/){
5051
+ var receiver = arguments.length < 3 ? target : arguments[2]
5052
+ , desc, proto;
5053
+ if(anObject(target) === receiver)return target[propertyKey];
5054
+ if(desc = gOPD.f(target, propertyKey))return has(desc, 'value')
5055
+ ? desc.value
5056
+ : desc.get !== undefined
5057
+ ? desc.get.call(receiver)
5058
+ : undefined;
5059
+ if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver);
5060
+ }
5061
+
5062
+ $export($export.S, 'Reflect', {get: get});
5063
+
5064
+ /***/ },
5065
+ /* 216 */
5066
+ /***/ function(module, exports, __webpack_require__) {
5067
+
5068
+ // 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
5069
+ var gOPD = __webpack_require__(49)
5070
+ , $export = __webpack_require__(6)
5071
+ , anObject = __webpack_require__(10);
5072
+
5073
+ $export($export.S, 'Reflect', {
5074
+ getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){
5075
+ return gOPD.f(anObject(target), propertyKey);
5076
+ }
5077
+ });
5078
+
5079
+ /***/ },
5080
+ /* 217 */
5081
+ /***/ function(module, exports, __webpack_require__) {
5082
+
5083
+ // 26.1.8 Reflect.getPrototypeOf(target)
5084
+ var $export = __webpack_require__(6)
5085
+ , getProto = __webpack_require__(57)
5086
+ , anObject = __webpack_require__(10);
5087
+
5088
+ $export($export.S, 'Reflect', {
5089
+ getPrototypeOf: function getPrototypeOf(target){
5090
+ return getProto(anObject(target));
5091
+ }
5092
+ });
5093
+
5094
+ /***/ },
5095
+ /* 218 */
5096
+ /***/ function(module, exports, __webpack_require__) {
5097
+
5098
+ // 26.1.9 Reflect.has(target, propertyKey)
5099
+ var $export = __webpack_require__(6);
5100
+
5101
+ $export($export.S, 'Reflect', {
5102
+ has: function has(target, propertyKey){
5103
+ return propertyKey in target;
5104
+ }
5105
+ });
5106
+
5107
+ /***/ },
5108
+ /* 219 */
5109
+ /***/ function(module, exports, __webpack_require__) {
5110
+
5111
+ // 26.1.10 Reflect.isExtensible(target)
5112
+ var $export = __webpack_require__(6)
5113
+ , anObject = __webpack_require__(10)
5114
+ , $isExtensible = Object.isExtensible;
5115
+
5116
+ $export($export.S, 'Reflect', {
5117
+ isExtensible: function isExtensible(target){
5118
+ anObject(target);
5119
+ return $isExtensible ? $isExtensible(target) : true;
5120
+ }
5121
+ });
5122
+
5123
+ /***/ },
5124
+ /* 220 */
5125
+ /***/ function(module, exports, __webpack_require__) {
5126
+
5127
+ // 26.1.11 Reflect.ownKeys(target)
5128
+ var $export = __webpack_require__(6);
5129
+
5130
+ $export($export.S, 'Reflect', {ownKeys: __webpack_require__(221)});
5131
+
5132
+ /***/ },
5133
+ /* 221 */
5134
+ /***/ function(module, exports, __webpack_require__) {
5135
+
5136
+ // all object keys, includes non-enumerable and symbols
5137
+ var gOPN = __webpack_require__(48)
5138
+ , gOPS = __webpack_require__(41)
5139
+ , anObject = __webpack_require__(10)
5140
+ , Reflect = __webpack_require__(2).Reflect;
5141
+ module.exports = Reflect && Reflect.ownKeys || function ownKeys(it){
5142
+ var keys = gOPN.f(anObject(it))
5143
+ , getSymbols = gOPS.f;
5144
+ return getSymbols ? keys.concat(getSymbols(it)) : keys;
5145
+ };
5146
+
5147
+ /***/ },
5148
+ /* 222 */
5149
+ /***/ function(module, exports, __webpack_require__) {
5150
+
5151
+ // 26.1.12 Reflect.preventExtensions(target)
5152
+ var $export = __webpack_require__(6)
5153
+ , anObject = __webpack_require__(10)
5154
+ , $preventExtensions = Object.preventExtensions;
5155
+
5156
+ $export($export.S, 'Reflect', {
5157
+ preventExtensions: function preventExtensions(target){
5158
+ anObject(target);
5159
+ try {
5160
+ if($preventExtensions)$preventExtensions(target);
5161
+ return true;
5162
+ } catch(e){
5163
+ return false;
5164
+ }
5165
+ }
5166
+ });
5167
+
5168
+ /***/ },
5169
+ /* 223 */
5170
+ /***/ function(module, exports, __webpack_require__) {
5171
+
5172
+ // 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
5173
+ var dP = __webpack_require__(9)
5174
+ , gOPD = __webpack_require__(49)
5175
+ , getPrototypeOf = __webpack_require__(57)
5176
+ , has = __webpack_require__(3)
5177
+ , $export = __webpack_require__(6)
5178
+ , createDesc = __webpack_require__(15)
5179
+ , anObject = __webpack_require__(10)
5180
+ , isObject = __webpack_require__(11);
5181
+
5182
+ function set(target, propertyKey, V/*, receiver*/){
5183
+ var receiver = arguments.length < 4 ? target : arguments[3]
5184
+ , ownDesc = gOPD.f(anObject(target), propertyKey)
5185
+ , existingDescriptor, proto;
5186
+ if(!ownDesc){
5187
+ if(isObject(proto = getPrototypeOf(target))){
5188
+ return set(proto, propertyKey, V, receiver);
5189
+ }
5190
+ ownDesc = createDesc(0);
5191
+ }
5192
+ if(has(ownDesc, 'value')){
5193
+ if(ownDesc.writable === false || !isObject(receiver))return false;
5194
+ existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);
5195
+ existingDescriptor.value = V;
5196
+ dP.f(receiver, propertyKey, existingDescriptor);
5197
+ return true;
5198
+ }
5199
+ return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
5200
+ }
5201
+
5202
+ $export($export.S, 'Reflect', {set: set});
5203
+
5204
+ /***/ },
5205
+ /* 224 */
5206
+ /***/ function(module, exports, __webpack_require__) {
5207
+
5208
+ // 26.1.14 Reflect.setPrototypeOf(target, proto)
5209
+ var $export = __webpack_require__(6)
5210
+ , setProto = __webpack_require__(71);
5211
+
5212
+ if(setProto)$export($export.S, 'Reflect', {
5213
+ setPrototypeOf: function setPrototypeOf(target, proto){
5214
+ setProto.check(target, proto);
5215
+ try {
5216
+ setProto.set(target, proto);
5217
+ return true;
5218
+ } catch(e){
5219
+ return false;
5220
+ }
5221
+ }
5222
+ });
5223
+
5224
+ /***/ },
5225
+ /* 225 */
5226
+ /***/ function(module, exports, __webpack_require__) {
5227
+
5228
+ // 20.3.3.1 / 15.9.4.4 Date.now()
5229
+ var $export = __webpack_require__(6);
5230
+
5231
+ $export($export.S, 'Date', {now: function(){ return new Date().getTime(); }});
5232
+
5233
+ /***/ },
5234
+ /* 226 */
5235
+ /***/ function(module, exports, __webpack_require__) {
5236
+
5237
+ 'use strict';
5238
+ var $export = __webpack_require__(6)
5239
+ , toObject = __webpack_require__(56)
5240
+ , toPrimitive = __webpack_require__(14);
5241
+
5242
+ $export($export.P + $export.F * __webpack_require__(5)(function(){
5243
+ return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1;
5244
+ }), 'Date', {
5245
+ toJSON: function toJSON(key){
5246
+ var O = toObject(this)
5247
+ , pv = toPrimitive(O);
5248
+ return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();
5249
+ }
5250
+ });
5251
+
5252
+ /***/ },
5253
+ /* 227 */
5254
+ /***/ function(module, exports, __webpack_require__) {
5255
+
5256
+ 'use strict';
5257
+ // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
5258
+ var $export = __webpack_require__(6)
5259
+ , fails = __webpack_require__(5)
5260
+ , getTime = Date.prototype.getTime;
5261
+
5262
+ var lz = function(num){
5263
+ return num > 9 ? num : '0' + num;
5264
+ };
5265
+
5266
+ // PhantomJS / old WebKit has a broken implementations
5267
+ $export($export.P + $export.F * (fails(function(){
5268
+ return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';
5269
+ }) || !fails(function(){
5270
+ new Date(NaN).toISOString();
5271
+ })), 'Date', {
5272
+ toISOString: function toISOString(){
5273
+ if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value');
5274
+ var d = this
5275
+ , y = d.getUTCFullYear()
5276
+ , m = d.getUTCMilliseconds()
5277
+ , s = y < 0 ? '-' : y > 9999 ? '+' : '';
5278
+ return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +
5279
+ '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +
5280
+ 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +
5281
+ ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';
5282
+ }
5283
+ });
5284
+
5285
+ /***/ },
5286
+ /* 228 */
5287
+ /***/ function(module, exports, __webpack_require__) {
5288
+
5289
+ var DateProto = Date.prototype
5290
+ , INVALID_DATE = 'Invalid Date'
5291
+ , TO_STRING = 'toString'
5292
+ , $toString = DateProto[TO_STRING]
5293
+ , getTime = DateProto.getTime;
5294
+ if(new Date(NaN) + '' != INVALID_DATE){
5295
+ __webpack_require__(16)(DateProto, TO_STRING, function toString(){
5296
+ var value = getTime.call(this);
5297
+ return value === value ? $toString.call(this) : INVALID_DATE;
5298
+ });
5299
+ }
5300
+
5301
+ /***/ },
5302
+ /* 229 */
5303
+ /***/ function(module, exports, __webpack_require__) {
5304
+
5305
+ var TO_PRIMITIVE = __webpack_require__(23)('toPrimitive')
5306
+ , proto = Date.prototype;
5307
+
5308
+ if(!(TO_PRIMITIVE in proto))__webpack_require__(8)(proto, TO_PRIMITIVE, __webpack_require__(230));
5309
+
5310
+ /***/ },
5311
+ /* 230 */
5312
+ /***/ function(module, exports, __webpack_require__) {
5313
+
5314
+ 'use strict';
5315
+ var anObject = __webpack_require__(10)
5316
+ , toPrimitive = __webpack_require__(14)
5317
+ , NUMBER = 'number';
5318
+
5319
+ module.exports = function(hint){
5320
+ if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint');
5321
+ return toPrimitive(anObject(this), hint != NUMBER);
5322
+ };
5323
+
5324
+ /***/ },
5325
+ /* 231 */
5326
+ /***/ function(module, exports, __webpack_require__) {
5327
+
5328
+ 'use strict';
5329
+ var $export = __webpack_require__(6)
5330
+ , $typed = __webpack_require__(232)
5331
+ , buffer = __webpack_require__(233)
5332
+ , anObject = __webpack_require__(10)
5333
+ , toIndex = __webpack_require__(37)
5334
+ , toLength = __webpack_require__(35)
5335
+ , isObject = __webpack_require__(11)
5336
+ , ArrayBuffer = __webpack_require__(2).ArrayBuffer
5337
+ , speciesConstructor = __webpack_require__(199)
5338
+ , $ArrayBuffer = buffer.ArrayBuffer
5339
+ , $DataView = buffer.DataView
5340
+ , $isView = $typed.ABV && ArrayBuffer.isView
5341
+ , $slice = $ArrayBuffer.prototype.slice
5342
+ , VIEW = $typed.VIEW
5343
+ , ARRAY_BUFFER = 'ArrayBuffer';
5344
+
5345
+ $export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});
5346
+
5347
+ $export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {
5348
+ // 24.1.3.1 ArrayBuffer.isView(arg)
5349
+ isView: function isView(it){
5350
+ return $isView && $isView(it) || isObject(it) && VIEW in it;
5351
+ }
5352
+ });
5353
+
5354
+ $export($export.P + $export.U + $export.F * __webpack_require__(5)(function(){
5355
+ return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
5356
+ }), ARRAY_BUFFER, {
5357
+ // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
5358
+ slice: function slice(start, end){
5359
+ if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix
5360
+ var len = anObject(this).byteLength
5361
+ , first = toIndex(start, len)
5362
+ , final = toIndex(end === undefined ? len : end, len)
5363
+ , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))
5364
+ , viewS = new $DataView(this)
5365
+ , viewT = new $DataView(result)
5366
+ , index = 0;
5367
+ while(first < final){
5368
+ viewT.setUint8(index++, viewS.getUint8(first++));
5369
+ } return result;
5370
+ }
5371
+ });
5372
+
5373
+ __webpack_require__(186)(ARRAY_BUFFER);
5374
+
5375
+ /***/ },
5376
+ /* 232 */
5377
+ /***/ function(module, exports, __webpack_require__) {
5378
+
5379
+ var global = __webpack_require__(2)
5380
+ , hide = __webpack_require__(8)
5381
+ , uid = __webpack_require__(17)
5382
+ , TYPED = uid('typed_array')
5383
+ , VIEW = uid('view')
5384
+ , ABV = !!(global.ArrayBuffer && global.DataView)
5385
+ , CONSTR = ABV
5386
+ , i = 0, l = 9, Typed;
5387
+
5388
+ var TypedArrayConstructors = (
5389
+ 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'
5390
+ ).split(',');
5391
+
5392
+ while(i < l){
5393
+ if(Typed = global[TypedArrayConstructors[i++]]){
5394
+ hide(Typed.prototype, TYPED, true);
5395
+ hide(Typed.prototype, VIEW, true);
5396
+ } else CONSTR = false;
5397
+ }
5398
+
5399
+ module.exports = {
5400
+ ABV: ABV,
5401
+ CONSTR: CONSTR,
5402
+ TYPED: TYPED,
5403
+ VIEW: VIEW
5404
+ };
5405
+
5406
+ /***/ },
5407
+ /* 233 */
5408
+ /***/ function(module, exports, __webpack_require__) {
5409
+
5410
+ 'use strict';
5411
+ var global = __webpack_require__(2)
5412
+ , DESCRIPTORS = __webpack_require__(4)
5413
+ , LIBRARY = __webpack_require__(26)
5414
+ , $typed = __webpack_require__(232)
5415
+ , hide = __webpack_require__(8)
5416
+ , redefineAll = __webpack_require__(202)
5417
+ , fails = __webpack_require__(5)
5418
+ , anInstance = __webpack_require__(197)
5419
+ , toInteger = __webpack_require__(36)
5420
+ , toLength = __webpack_require__(35)
5421
+ , gOPN = __webpack_require__(48).f
5422
+ , dP = __webpack_require__(9).f
5423
+ , arrayFill = __webpack_require__(180)
5424
+ , setToStringTag = __webpack_require__(22)
5425
+ , ARRAY_BUFFER = 'ArrayBuffer'
5426
+ , DATA_VIEW = 'DataView'
5427
+ , PROTOTYPE = 'prototype'
5428
+ , WRONG_LENGTH = 'Wrong length!'
5429
+ , WRONG_INDEX = 'Wrong index!'
5430
+ , $ArrayBuffer = global[ARRAY_BUFFER]
5431
+ , $DataView = global[DATA_VIEW]
5432
+ , Math = global.Math
5433
+ , RangeError = global.RangeError
5434
+ , Infinity = global.Infinity
5435
+ , BaseBuffer = $ArrayBuffer
5436
+ , abs = Math.abs
5437
+ , pow = Math.pow
5438
+ , floor = Math.floor
5439
+ , log = Math.log
5440
+ , LN2 = Math.LN2
5441
+ , BUFFER = 'buffer'
5442
+ , BYTE_LENGTH = 'byteLength'
5443
+ , BYTE_OFFSET = 'byteOffset'
5444
+ , $BUFFER = DESCRIPTORS ? '_b' : BUFFER
5445
+ , $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH
5446
+ , $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;
5447
+
5448
+ // IEEE754 conversions based on https://github.com/feross/ieee754
5449
+ var packIEEE754 = function(value, mLen, nBytes){
5450
+ var buffer = Array(nBytes)
5451
+ , eLen = nBytes * 8 - mLen - 1
5452
+ , eMax = (1 << eLen) - 1
5453
+ , eBias = eMax >> 1
5454
+ , rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0
5455
+ , i = 0
5456
+ , s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0
5457
+ , e, m, c;
5458
+ value = abs(value)
5459
+ if(value != value || value === Infinity){
5460
+ m = value != value ? 1 : 0;
5461
+ e = eMax;
5462
+ } else {
5463
+ e = floor(log(value) / LN2);
5464
+ if(value * (c = pow(2, -e)) < 1){
5465
+ e--;
5466
+ c *= 2;
5467
+ }
5468
+ if(e + eBias >= 1){
5469
+ value += rt / c;
5470
+ } else {
5471
+ value += rt * pow(2, 1 - eBias);
5472
+ }
5473
+ if(value * c >= 2){
5474
+ e++;
5475
+ c /= 2;
5476
+ }
5477
+ if(e + eBias >= eMax){
5478
+ m = 0;
5479
+ e = eMax;
5480
+ } else if(e + eBias >= 1){
5481
+ m = (value * c - 1) * pow(2, mLen);
5482
+ e = e + eBias;
5483
+ } else {
5484
+ m = value * pow(2, eBias - 1) * pow(2, mLen);
5485
+ e = 0;
5486
+ }
5487
+ }
5488
+ for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);
5489
+ e = e << mLen | m;
5490
+ eLen += mLen;
5491
+ for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);
5492
+ buffer[--i] |= s * 128;
5493
+ return buffer;
5494
+ };
5495
+ var unpackIEEE754 = function(buffer, mLen, nBytes){
5496
+ var eLen = nBytes * 8 - mLen - 1
5497
+ , eMax = (1 << eLen) - 1
5498
+ , eBias = eMax >> 1
5499
+ , nBits = eLen - 7
5500
+ , i = nBytes - 1
5501
+ , s = buffer[i--]
5502
+ , e = s & 127
5503
+ , m;
5504
+ s >>= 7;
5505
+ for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);
5506
+ m = e & (1 << -nBits) - 1;
5507
+ e >>= -nBits;
5508
+ nBits += mLen;
5509
+ for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);
5510
+ if(e === 0){
5511
+ e = 1 - eBias;
5512
+ } else if(e === eMax){
5513
+ return m ? NaN : s ? -Infinity : Infinity;
5514
+ } else {
5515
+ m = m + pow(2, mLen);
5516
+ e = e - eBias;
5517
+ } return (s ? -1 : 1) * m * pow(2, e - mLen);
5518
+ };
5519
+
5520
+ var unpackI32 = function(bytes){
5521
+ return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
5522
+ };
5523
+ var packI8 = function(it){
5524
+ return [it & 0xff];
5525
+ };
5526
+ var packI16 = function(it){
5527
+ return [it & 0xff, it >> 8 & 0xff];
5528
+ };
5529
+ var packI32 = function(it){
5530
+ return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];
5531
+ };
5532
+ var packF64 = function(it){
5533
+ return packIEEE754(it, 52, 8);
5534
+ };
5535
+ var packF32 = function(it){
5536
+ return packIEEE754(it, 23, 4);
5537
+ };
5538
+
5539
+ var addGetter = function(C, key, internal){
5540
+ dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }});
5541
+ };
5542
+
5543
+ var get = function(view, bytes, index, isLittleEndian){
5544
+ var numIndex = +index
5545
+ , intIndex = toInteger(numIndex);
5546
+ if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);
5547
+ var store = view[$BUFFER]._b
5548
+ , start = intIndex + view[$OFFSET]
5549
+ , pack = store.slice(start, start + bytes);
5550
+ return isLittleEndian ? pack : pack.reverse();
5551
+ };
5552
+ var set = function(view, bytes, index, conversion, value, isLittleEndian){
5553
+ var numIndex = +index
5554
+ , intIndex = toInteger(numIndex);
5555
+ if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);
5556
+ var store = view[$BUFFER]._b
5557
+ , start = intIndex + view[$OFFSET]
5558
+ , pack = conversion(+value);
5559
+ for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
5560
+ };
5561
+
5562
+ var validateArrayBufferArguments = function(that, length){
5563
+ anInstance(that, $ArrayBuffer, ARRAY_BUFFER);
5564
+ var numberLength = +length
5565
+ , byteLength = toLength(numberLength);
5566
+ if(numberLength != byteLength)throw RangeError(WRONG_LENGTH);
5567
+ return byteLength;
5568
+ };
5569
+
5570
+ if(!$typed.ABV){
5571
+ $ArrayBuffer = function ArrayBuffer(length){
5572
+ var byteLength = validateArrayBufferArguments(this, length);
5573
+ this._b = arrayFill.call(Array(byteLength), 0);
5574
+ this[$LENGTH] = byteLength;
5575
+ };
5576
+
5577
+ $DataView = function DataView(buffer, byteOffset, byteLength){
5578
+ anInstance(this, $DataView, DATA_VIEW);
5579
+ anInstance(buffer, $ArrayBuffer, DATA_VIEW);
5580
+ var bufferLength = buffer[$LENGTH]
5581
+ , offset = toInteger(byteOffset);
5582
+ if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!');
5583
+ byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
5584
+ if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH);
5585
+ this[$BUFFER] = buffer;
5586
+ this[$OFFSET] = offset;
5587
+ this[$LENGTH] = byteLength;
5588
+ };
5589
+
5590
+ if(DESCRIPTORS){
5591
+ addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
5592
+ addGetter($DataView, BUFFER, '_b');
5593
+ addGetter($DataView, BYTE_LENGTH, '_l');
5594
+ addGetter($DataView, BYTE_OFFSET, '_o');
5595
+ }
5596
+
5597
+ redefineAll($DataView[PROTOTYPE], {
5598
+ getInt8: function getInt8(byteOffset){
5599
+ return get(this, 1, byteOffset)[0] << 24 >> 24;
5600
+ },
5601
+ getUint8: function getUint8(byteOffset){
5602
+ return get(this, 1, byteOffset)[0];
5603
+ },
5604
+ getInt16: function getInt16(byteOffset /*, littleEndian */){
5605
+ var bytes = get(this, 2, byteOffset, arguments[1]);
5606
+ return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
5607
+ },
5608
+ getUint16: function getUint16(byteOffset /*, littleEndian */){
5609
+ var bytes = get(this, 2, byteOffset, arguments[1]);
5610
+ return bytes[1] << 8 | bytes[0];
5611
+ },
5612
+ getInt32: function getInt32(byteOffset /*, littleEndian */){
5613
+ return unpackI32(get(this, 4, byteOffset, arguments[1]));
5614
+ },
5615
+ getUint32: function getUint32(byteOffset /*, littleEndian */){
5616
+ return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
5617
+ },
5618
+ getFloat32: function getFloat32(byteOffset /*, littleEndian */){
5619
+ return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
5620
+ },
5621
+ getFloat64: function getFloat64(byteOffset /*, littleEndian */){
5622
+ return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
5623
+ },
5624
+ setInt8: function setInt8(byteOffset, value){
5625
+ set(this, 1, byteOffset, packI8, value);
5626
+ },
5627
+ setUint8: function setUint8(byteOffset, value){
5628
+ set(this, 1, byteOffset, packI8, value);
5629
+ },
5630
+ setInt16: function setInt16(byteOffset, value /*, littleEndian */){
5631
+ set(this, 2, byteOffset, packI16, value, arguments[2]);
5632
+ },
5633
+ setUint16: function setUint16(byteOffset, value /*, littleEndian */){
5634
+ set(this, 2, byteOffset, packI16, value, arguments[2]);
5635
+ },
5636
+ setInt32: function setInt32(byteOffset, value /*, littleEndian */){
5637
+ set(this, 4, byteOffset, packI32, value, arguments[2]);
5638
+ },
5639
+ setUint32: function setUint32(byteOffset, value /*, littleEndian */){
5640
+ set(this, 4, byteOffset, packI32, value, arguments[2]);
5641
+ },
5642
+ setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){
5643
+ set(this, 4, byteOffset, packF32, value, arguments[2]);
5644
+ },
5645
+ setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){
5646
+ set(this, 8, byteOffset, packF64, value, arguments[2]);
5647
+ }
5648
+ });
5649
+ } else {
5650
+ if(!fails(function(){
5651
+ new $ArrayBuffer; // eslint-disable-line no-new
5652
+ }) || !fails(function(){
5653
+ new $ArrayBuffer(.5); // eslint-disable-line no-new
5654
+ })){
5655
+ $ArrayBuffer = function ArrayBuffer(length){
5656
+ return new BaseBuffer(validateArrayBufferArguments(this, length));
5657
+ };
5658
+ var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
5659
+ for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){
5660
+ if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]);
5661
+ };
5662
+ if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer;
5663
+ }
5664
+ // iOS Safari 7.x bug
5665
+ var view = new $DataView(new $ArrayBuffer(2))
5666
+ , $setInt8 = $DataView[PROTOTYPE].setInt8;
5667
+ view.setInt8(0, 2147483648);
5668
+ view.setInt8(1, 2147483649);
5669
+ if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], {
5670
+ setInt8: function setInt8(byteOffset, value){
5671
+ $setInt8.call(this, byteOffset, value << 24 >> 24);
5672
+ },
5673
+ setUint8: function setUint8(byteOffset, value){
5674
+ $setInt8.call(this, byteOffset, value << 24 >> 24);
5675
+ }
5676
+ }, true);
5677
+ }
5678
+ setToStringTag($ArrayBuffer, ARRAY_BUFFER);
5679
+ setToStringTag($DataView, DATA_VIEW);
5680
+ hide($DataView[PROTOTYPE], $typed.VIEW, true);
5681
+ exports[ARRAY_BUFFER] = $ArrayBuffer;
5682
+ exports[DATA_VIEW] = $DataView;
5683
+
5684
+ /***/ },
5685
+ /* 234 */
5686
+ /***/ function(module, exports, __webpack_require__) {
5687
+
5688
+ var $export = __webpack_require__(6);
5689
+ $export($export.G + $export.W + $export.F * !__webpack_require__(232).ABV, {
5690
+ DataView: __webpack_require__(233).DataView
5691
+ });
5692
+
5693
+ /***/ },
5694
+ /* 235 */
5695
+ /***/ function(module, exports, __webpack_require__) {
5696
+
5697
+ __webpack_require__(236)('Int8', 1, function(init){
5698
+ return function Int8Array(data, byteOffset, length){
5699
+ return init(this, data, byteOffset, length);
5700
+ };
5701
+ });
5702
+
5703
+ /***/ },
5704
+ /* 236 */
5705
+ /***/ function(module, exports, __webpack_require__) {
5706
+
5707
+ 'use strict';
5708
+ if(__webpack_require__(4)){
5709
+ var LIBRARY = __webpack_require__(26)
5710
+ , global = __webpack_require__(2)
5711
+ , fails = __webpack_require__(5)
5712
+ , $export = __webpack_require__(6)
5713
+ , $typed = __webpack_require__(232)
5714
+ , $buffer = __webpack_require__(233)
5715
+ , ctx = __webpack_require__(18)
5716
+ , anInstance = __webpack_require__(197)
5717
+ , propertyDesc = __webpack_require__(15)
5718
+ , hide = __webpack_require__(8)
5719
+ , redefineAll = __webpack_require__(202)
5720
+ , toInteger = __webpack_require__(36)
5721
+ , toLength = __webpack_require__(35)
5722
+ , toIndex = __webpack_require__(37)
5723
+ , toPrimitive = __webpack_require__(14)
5724
+ , has = __webpack_require__(3)
5725
+ , same = __webpack_require__(69)
5726
+ , classof = __webpack_require__(73)
5727
+ , isObject = __webpack_require__(11)
5728
+ , toObject = __webpack_require__(56)
5729
+ , isArrayIter = __webpack_require__(154)
5730
+ , create = __webpack_require__(44)
5731
+ , getPrototypeOf = __webpack_require__(57)
5732
+ , gOPN = __webpack_require__(48).f
5733
+ , getIterFn = __webpack_require__(156)
5734
+ , uid = __webpack_require__(17)
5735
+ , wks = __webpack_require__(23)
5736
+ , createArrayMethod = __webpack_require__(164)
5737
+ , createArrayIncludes = __webpack_require__(34)
5738
+ , speciesConstructor = __webpack_require__(199)
5739
+ , ArrayIterators = __webpack_require__(183)
5740
+ , Iterators = __webpack_require__(135)
5741
+ , $iterDetect = __webpack_require__(157)
5742
+ , setSpecies = __webpack_require__(186)
5743
+ , arrayFill = __webpack_require__(180)
5744
+ , arrayCopyWithin = __webpack_require__(177)
5745
+ , $DP = __webpack_require__(9)
5746
+ , $GOPD = __webpack_require__(49)
5747
+ , dP = $DP.f
5748
+ , gOPD = $GOPD.f
5749
+ , RangeError = global.RangeError
5750
+ , TypeError = global.TypeError
5751
+ , Uint8Array = global.Uint8Array
5752
+ , ARRAY_BUFFER = 'ArrayBuffer'
5753
+ , SHARED_BUFFER = 'Shared' + ARRAY_BUFFER
5754
+ , BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT'
5755
+ , PROTOTYPE = 'prototype'
5756
+ , ArrayProto = Array[PROTOTYPE]
5757
+ , $ArrayBuffer = $buffer.ArrayBuffer
5758
+ , $DataView = $buffer.DataView
5759
+ , arrayForEach = createArrayMethod(0)
5760
+ , arrayFilter = createArrayMethod(2)
5761
+ , arraySome = createArrayMethod(3)
5762
+ , arrayEvery = createArrayMethod(4)
5763
+ , arrayFind = createArrayMethod(5)
5764
+ , arrayFindIndex = createArrayMethod(6)
5765
+ , arrayIncludes = createArrayIncludes(true)
5766
+ , arrayIndexOf = createArrayIncludes(false)
5767
+ , arrayValues = ArrayIterators.values
5768
+ , arrayKeys = ArrayIterators.keys
5769
+ , arrayEntries = ArrayIterators.entries
5770
+ , arrayLastIndexOf = ArrayProto.lastIndexOf
5771
+ , arrayReduce = ArrayProto.reduce
5772
+ , arrayReduceRight = ArrayProto.reduceRight
5773
+ , arrayJoin = ArrayProto.join
5774
+ , arraySort = ArrayProto.sort
5775
+ , arraySlice = ArrayProto.slice
5776
+ , arrayToString = ArrayProto.toString
5777
+ , arrayToLocaleString = ArrayProto.toLocaleString
5778
+ , ITERATOR = wks('iterator')
5779
+ , TAG = wks('toStringTag')
5780
+ , TYPED_CONSTRUCTOR = uid('typed_constructor')
5781
+ , DEF_CONSTRUCTOR = uid('def_constructor')
5782
+ , ALL_CONSTRUCTORS = $typed.CONSTR
5783
+ , TYPED_ARRAY = $typed.TYPED
5784
+ , VIEW = $typed.VIEW
5785
+ , WRONG_LENGTH = 'Wrong length!';
5786
+
5787
+ var $map = createArrayMethod(1, function(O, length){
5788
+ return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
5789
+ });
5790
+
5791
+ var LITTLE_ENDIAN = fails(function(){
5792
+ return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
5793
+ });
5794
+
5795
+ var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){
5796
+ new Uint8Array(1).set({});
5797
+ });
5798
+
5799
+ var strictToLength = function(it, SAME){
5800
+ if(it === undefined)throw TypeError(WRONG_LENGTH);
5801
+ var number = +it
5802
+ , length = toLength(it);
5803
+ if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH);
5804
+ return length;
5805
+ };
5806
+
5807
+ var toOffset = function(it, BYTES){
5808
+ var offset = toInteger(it);
5809
+ if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!');
5810
+ return offset;
5811
+ };
5812
+
5813
+ var validate = function(it){
5814
+ if(isObject(it) && TYPED_ARRAY in it)return it;
5815
+ throw TypeError(it + ' is not a typed array!');
5816
+ };
5817
+
5818
+ var allocate = function(C, length){
5819
+ if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){
5820
+ throw TypeError('It is not a typed array constructor!');
5821
+ } return new C(length);
5822
+ };
5823
+
5824
+ var speciesFromList = function(O, list){
5825
+ return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
5826
+ };
5827
+
5828
+ var fromList = function(C, list){
5829
+ var index = 0
5830
+ , length = list.length
5831
+ , result = allocate(C, length);
5832
+ while(length > index)result[index] = list[index++];
5833
+ return result;
5834
+ };
5835
+
5836
+ var addGetter = function(it, key, internal){
5837
+ dP(it, key, {get: function(){ return this._d[internal]; }});
5838
+ };
5839
+
5840
+ var $from = function from(source /*, mapfn, thisArg */){
5841
+ var O = toObject(source)
5842
+ , aLen = arguments.length
5843
+ , mapfn = aLen > 1 ? arguments[1] : undefined
5844
+ , mapping = mapfn !== undefined
5845
+ , iterFn = getIterFn(O)
5846
+ , i, length, values, result, step, iterator;
5847
+ if(iterFn != undefined && !isArrayIter(iterFn)){
5848
+ for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){
5849
+ values.push(step.value);
5850
+ } O = values;
5851
+ }
5852
+ if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2);
5853
+ for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){
5854
+ result[i] = mapping ? mapfn(O[i], i) : O[i];
5855
+ }
5856
+ return result;
5857
+ };
5858
+
5859
+ var $of = function of(/*...items*/){
5860
+ var index = 0
5861
+ , length = arguments.length
5862
+ , result = allocate(this, length);
5863
+ while(length > index)result[index] = arguments[index++];
5864
+ return result;
5865
+ };
5866
+
5867
+ // iOS Safari 6.x fails here
5868
+ var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); });
5869
+
5870
+ var $toLocaleString = function toLocaleString(){
5871
+ return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
5872
+ };
5873
+
5874
+ var proto = {
5875
+ copyWithin: function copyWithin(target, start /*, end */){
5876
+ return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
5877
+ },
5878
+ every: function every(callbackfn /*, thisArg */){
5879
+ return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
5880
+ },
5881
+ fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars
5882
+ return arrayFill.apply(validate(this), arguments);
5883
+ },
5884
+ filter: function filter(callbackfn /*, thisArg */){
5885
+ return speciesFromList(this, arrayFilter(validate(this), callbackfn,
5886
+ arguments.length > 1 ? arguments[1] : undefined));
5887
+ },
5888
+ find: function find(predicate /*, thisArg */){
5889
+ return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
5890
+ },
5891
+ findIndex: function findIndex(predicate /*, thisArg */){
5892
+ return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
5893
+ },
5894
+ forEach: function forEach(callbackfn /*, thisArg */){
5895
+ arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
5896
+ },
5897
+ indexOf: function indexOf(searchElement /*, fromIndex */){
5898
+ return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
5899
+ },
5900
+ includes: function includes(searchElement /*, fromIndex */){
5901
+ return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
5902
+ },
5903
+ join: function join(separator){ // eslint-disable-line no-unused-vars
5904
+ return arrayJoin.apply(validate(this), arguments);
5905
+ },
5906
+ lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars
5907
+ return arrayLastIndexOf.apply(validate(this), arguments);
5908
+ },
5909
+ map: function map(mapfn /*, thisArg */){
5910
+ return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
5911
+ },
5912
+ reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars
5913
+ return arrayReduce.apply(validate(this), arguments);
5914
+ },
5915
+ reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars
5916
+ return arrayReduceRight.apply(validate(this), arguments);
5917
+ },
5918
+ reverse: function reverse(){
5919
+ var that = this
5920
+ , length = validate(that).length
5921
+ , middle = Math.floor(length / 2)
5922
+ , index = 0
5923
+ , value;
5924
+ while(index < middle){
5925
+ value = that[index];
5926
+ that[index++] = that[--length];
5927
+ that[length] = value;
5928
+ } return that;
5929
+ },
5930
+ some: function some(callbackfn /*, thisArg */){
5931
+ return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
5932
+ },
5933
+ sort: function sort(comparefn){
5934
+ return arraySort.call(validate(this), comparefn);
5935
+ },
5936
+ subarray: function subarray(begin, end){
5937
+ var O = validate(this)
5938
+ , length = O.length
5939
+ , $begin = toIndex(begin, length);
5940
+ return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
5941
+ O.buffer,
5942
+ O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
5943
+ toLength((end === undefined ? length : toIndex(end, length)) - $begin)
5944
+ );
5945
+ }
5946
+ };
5947
+
5948
+ var $slice = function slice(start, end){
5949
+ return speciesFromList(this, arraySlice.call(validate(this), start, end));
5950
+ };
5951
+
5952
+ var $set = function set(arrayLike /*, offset */){
5953
+ validate(this);
5954
+ var offset = toOffset(arguments[1], 1)
5955
+ , length = this.length
5956
+ , src = toObject(arrayLike)
5957
+ , len = toLength(src.length)
5958
+ , index = 0;
5959
+ if(len + offset > length)throw RangeError(WRONG_LENGTH);
5960
+ while(index < len)this[offset + index] = src[index++];
5961
+ };
5962
+
5963
+ var $iterators = {
5964
+ entries: function entries(){
5965
+ return arrayEntries.call(validate(this));
5966
+ },
5967
+ keys: function keys(){
5968
+ return arrayKeys.call(validate(this));
5969
+ },
5970
+ values: function values(){
5971
+ return arrayValues.call(validate(this));
5972
+ }
5973
+ };
5974
+
5975
+ var isTAIndex = function(target, key){
5976
+ return isObject(target)
5977
+ && target[TYPED_ARRAY]
5978
+ && typeof key != 'symbol'
5979
+ && key in target
5980
+ && String(+key) == String(key);
5981
+ };
5982
+ var $getDesc = function getOwnPropertyDescriptor(target, key){
5983
+ return isTAIndex(target, key = toPrimitive(key, true))
5984
+ ? propertyDesc(2, target[key])
5985
+ : gOPD(target, key);
5986
+ };
5987
+ var $setDesc = function defineProperty(target, key, desc){
5988
+ if(isTAIndex(target, key = toPrimitive(key, true))
5989
+ && isObject(desc)
5990
+ && has(desc, 'value')
5991
+ && !has(desc, 'get')
5992
+ && !has(desc, 'set')
5993
+ // TODO: add validation descriptor w/o calling accessors
5994
+ && !desc.configurable
5995
+ && (!has(desc, 'writable') || desc.writable)
5996
+ && (!has(desc, 'enumerable') || desc.enumerable)
5997
+ ){
5998
+ target[key] = desc.value;
5999
+ return target;
6000
+ } else return dP(target, key, desc);
6001
+ };
6002
+
6003
+ if(!ALL_CONSTRUCTORS){
6004
+ $GOPD.f = $getDesc;
6005
+ $DP.f = $setDesc;
6006
+ }
6007
+
6008
+ $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {
6009
+ getOwnPropertyDescriptor: $getDesc,
6010
+ defineProperty: $setDesc
6011
+ });
6012
+
6013
+ if(fails(function(){ arrayToString.call({}); })){
6014
+ arrayToString = arrayToLocaleString = function toString(){
6015
+ return arrayJoin.call(this);
6016
+ }
6017
+ }
6018
+
6019
+ var $TypedArrayPrototype$ = redefineAll({}, proto);
6020
+ redefineAll($TypedArrayPrototype$, $iterators);
6021
+ hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
6022
+ redefineAll($TypedArrayPrototype$, {
6023
+ slice: $slice,
6024
+ set: $set,
6025
+ constructor: function(){ /* noop */ },
6026
+ toString: arrayToString,
6027
+ toLocaleString: $toLocaleString
6028
+ });
6029
+ addGetter($TypedArrayPrototype$, 'buffer', 'b');
6030
+ addGetter($TypedArrayPrototype$, 'byteOffset', 'o');
6031
+ addGetter($TypedArrayPrototype$, 'byteLength', 'l');
6032
+ addGetter($TypedArrayPrototype$, 'length', 'e');
6033
+ dP($TypedArrayPrototype$, TAG, {
6034
+ get: function(){ return this[TYPED_ARRAY]; }
6035
+ });
6036
+
6037
+ module.exports = function(KEY, BYTES, wrapper, CLAMPED){
6038
+ CLAMPED = !!CLAMPED;
6039
+ var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'
6040
+ , ISNT_UINT8 = NAME != 'Uint8Array'
6041
+ , GETTER = 'get' + KEY
6042
+ , SETTER = 'set' + KEY
6043
+ , TypedArray = global[NAME]
6044
+ , Base = TypedArray || {}
6045
+ , TAC = TypedArray && getPrototypeOf(TypedArray)
6046
+ , FORCED = !TypedArray || !$typed.ABV
6047
+ , O = {}
6048
+ , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];
6049
+ var getter = function(that, index){
6050
+ var data = that._d;
6051
+ return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
6052
+ };
6053
+ var setter = function(that, index, value){
6054
+ var data = that._d;
6055
+ if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
6056
+ data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
6057
+ };
6058
+ var addElement = function(that, index){
6059
+ dP(that, index, {
6060
+ get: function(){
6061
+ return getter(this, index);
6062
+ },
6063
+ set: function(value){
6064
+ return setter(this, index, value);
6065
+ },
6066
+ enumerable: true
6067
+ });
6068
+ };
6069
+ if(FORCED){
6070
+ TypedArray = wrapper(function(that, data, $offset, $length){
6071
+ anInstance(that, TypedArray, NAME, '_d');
6072
+ var index = 0
6073
+ , offset = 0
6074
+ , buffer, byteLength, length, klass;
6075
+ if(!isObject(data)){
6076
+ length = strictToLength(data, true)
6077
+ byteLength = length * BYTES;
6078
+ buffer = new $ArrayBuffer(byteLength);
6079
+ } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){
6080
+ buffer = data;
6081
+ offset = toOffset($offset, BYTES);
6082
+ var $len = data.byteLength;
6083
+ if($length === undefined){
6084
+ if($len % BYTES)throw RangeError(WRONG_LENGTH);
6085
+ byteLength = $len - offset;
6086
+ if(byteLength < 0)throw RangeError(WRONG_LENGTH);
6087
+ } else {
6088
+ byteLength = toLength($length) * BYTES;
6089
+ if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH);
6090
+ }
6091
+ length = byteLength / BYTES;
6092
+ } else if(TYPED_ARRAY in data){
6093
+ return fromList(TypedArray, data);
6094
+ } else {
6095
+ return $from.call(TypedArray, data);
6096
+ }
6097
+ hide(that, '_d', {
6098
+ b: buffer,
6099
+ o: offset,
6100
+ l: byteLength,
6101
+ e: length,
6102
+ v: new $DataView(buffer)
6103
+ });
6104
+ while(index < length)addElement(that, index++);
6105
+ });
6106
+ TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
6107
+ hide(TypedArrayPrototype, 'constructor', TypedArray);
6108
+ } else if(!$iterDetect(function(iter){
6109
+ // V8 works with iterators, but fails in many other cases
6110
+ // https://code.google.com/p/v8/issues/detail?id=4552
6111
+ new TypedArray(null); // eslint-disable-line no-new
6112
+ new TypedArray(iter); // eslint-disable-line no-new
6113
+ }, true)){
6114
+ TypedArray = wrapper(function(that, data, $offset, $length){
6115
+ anInstance(that, TypedArray, NAME);
6116
+ var klass;
6117
+ // `ws` module bug, temporarily remove validation length for Uint8Array
6118
+ // https://github.com/websockets/ws/pull/645
6119
+ if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8));
6120
+ if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){
6121
+ return $length !== undefined
6122
+ ? new Base(data, toOffset($offset, BYTES), $length)
6123
+ : $offset !== undefined
6124
+ ? new Base(data, toOffset($offset, BYTES))
6125
+ : new Base(data);
6126
+ }
6127
+ if(TYPED_ARRAY in data)return fromList(TypedArray, data);
6128
+ return $from.call(TypedArray, data);
6129
+ });
6130
+ arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){
6131
+ if(!(key in TypedArray))hide(TypedArray, key, Base[key]);
6132
+ });
6133
+ TypedArray[PROTOTYPE] = TypedArrayPrototype;
6134
+ if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray;
6135
+ }
6136
+ var $nativeIterator = TypedArrayPrototype[ITERATOR]
6137
+ , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined)
6138
+ , $iterator = $iterators.values;
6139
+ hide(TypedArray, TYPED_CONSTRUCTOR, true);
6140
+ hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
6141
+ hide(TypedArrayPrototype, VIEW, true);
6142
+ hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
6143
+
6144
+ if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){
6145
+ dP(TypedArrayPrototype, TAG, {
6146
+ get: function(){ return NAME; }
6147
+ });
6148
+ }
6149
+
6150
+ O[NAME] = TypedArray;
6151
+
6152
+ $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
6153
+
6154
+ $export($export.S, NAME, {
6155
+ BYTES_PER_ELEMENT: BYTES,
6156
+ from: $from,
6157
+ of: $of
6158
+ });
6159
+
6160
+ if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
6161
+
6162
+ $export($export.P, NAME, proto);
6163
+
6164
+ setSpecies(NAME);
6165
+
6166
+ $export($export.P + $export.F * FORCED_SET, NAME, {set: $set});
6167
+
6168
+ $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
6169
+
6170
+ $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString});
6171
+
6172
+ $export($export.P + $export.F * fails(function(){
6173
+ new TypedArray(1).slice();
6174
+ }), NAME, {slice: $slice});
6175
+
6176
+ $export($export.P + $export.F * (fails(function(){
6177
+ return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString()
6178
+ }) || !fails(function(){
6179
+ TypedArrayPrototype.toLocaleString.call([1, 2]);
6180
+ })), NAME, {toLocaleString: $toLocaleString});
6181
+
6182
+ Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
6183
+ if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator);
6184
+ };
6185
+ } else module.exports = function(){ /* empty */ };
6186
+
6187
+ /***/ },
6188
+ /* 237 */
6189
+ /***/ function(module, exports, __webpack_require__) {
6190
+
6191
+ __webpack_require__(236)('Uint8', 1, function(init){
6192
+ return function Uint8Array(data, byteOffset, length){
6193
+ return init(this, data, byteOffset, length);
6194
+ };
6195
+ });
6196
+
6197
+ /***/ },
6198
+ /* 238 */
6199
+ /***/ function(module, exports, __webpack_require__) {
6200
+
6201
+ __webpack_require__(236)('Uint8', 1, function(init){
6202
+ return function Uint8ClampedArray(data, byteOffset, length){
6203
+ return init(this, data, byteOffset, length);
6204
+ };
6205
+ }, true);
6206
+
6207
+ /***/ },
6208
+ /* 239 */
6209
+ /***/ function(module, exports, __webpack_require__) {
6210
+
6211
+ __webpack_require__(236)('Int16', 2, function(init){
6212
+ return function Int16Array(data, byteOffset, length){
6213
+ return init(this, data, byteOffset, length);
6214
+ };
6215
+ });
6216
+
6217
+ /***/ },
6218
+ /* 240 */
6219
+ /***/ function(module, exports, __webpack_require__) {
6220
+
6221
+ __webpack_require__(236)('Uint16', 2, function(init){
6222
+ return function Uint16Array(data, byteOffset, length){
6223
+ return init(this, data, byteOffset, length);
6224
+ };
6225
+ });
6226
+
6227
+ /***/ },
6228
+ /* 241 */
6229
+ /***/ function(module, exports, __webpack_require__) {
6230
+
6231
+ __webpack_require__(236)('Int32', 4, function(init){
6232
+ return function Int32Array(data, byteOffset, length){
6233
+ return init(this, data, byteOffset, length);
6234
+ };
6235
+ });
6236
+
6237
+ /***/ },
6238
+ /* 242 */
6239
+ /***/ function(module, exports, __webpack_require__) {
6240
+
6241
+ __webpack_require__(236)('Uint32', 4, function(init){
6242
+ return function Uint32Array(data, byteOffset, length){
6243
+ return init(this, data, byteOffset, length);
6244
+ };
6245
+ });
6246
+
6247
+ /***/ },
6248
+ /* 243 */
6249
+ /***/ function(module, exports, __webpack_require__) {
6250
+
6251
+ __webpack_require__(236)('Float32', 4, function(init){
6252
+ return function Float32Array(data, byteOffset, length){
6253
+ return init(this, data, byteOffset, length);
6254
+ };
6255
+ });
6256
+
6257
+ /***/ },
6258
+ /* 244 */
6259
+ /***/ function(module, exports, __webpack_require__) {
6260
+
6261
+ __webpack_require__(236)('Float64', 8, function(init){
6262
+ return function Float64Array(data, byteOffset, length){
6263
+ return init(this, data, byteOffset, length);
6264
+ };
6265
+ });
6266
+
6267
+ /***/ },
6268
+ /* 245 */
6269
+ /***/ function(module, exports, __webpack_require__) {
6270
+
6271
+ 'use strict';
6272
+ // https://github.com/tc39/Array.prototype.includes
6273
+ var $export = __webpack_require__(6)
6274
+ , $includes = __webpack_require__(34)(true);
6275
+
6276
+ $export($export.P, 'Array', {
6277
+ includes: function includes(el /*, fromIndex = 0 */){
6278
+ return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
6279
+ }
6280
+ });
6281
+
6282
+ __webpack_require__(178)('includes');
6283
+
6284
+ /***/ },
6285
+ /* 246 */
6286
+ /***/ function(module, exports, __webpack_require__) {
6287
+
6288
+ 'use strict';
6289
+ // https://github.com/mathiasbynens/String.prototype.at
6290
+ var $export = __webpack_require__(6)
6291
+ , $at = __webpack_require__(125)(true);
6292
+
6293
+ $export($export.P, 'String', {
6294
+ at: function at(pos){
6295
+ return $at(this, pos);
6296
+ }
6297
+ });
6298
+
6299
+ /***/ },
6300
+ /* 247 */
6301
+ /***/ function(module, exports, __webpack_require__) {
6302
+
6303
+ 'use strict';
6304
+ // https://github.com/tc39/proposal-string-pad-start-end
6305
+ var $export = __webpack_require__(6)
6306
+ , $pad = __webpack_require__(248);
6307
+
6308
+ $export($export.P, 'String', {
6309
+ padStart: function padStart(maxLength /*, fillString = ' ' */){
6310
+ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
6311
+ }
6312
+ });
6313
+
6314
+ /***/ },
6315
+ /* 248 */
6316
+ /***/ function(module, exports, __webpack_require__) {
6317
+
6318
+ // https://github.com/tc39/proposal-string-pad-start-end
6319
+ var toLength = __webpack_require__(35)
6320
+ , repeat = __webpack_require__(85)
6321
+ , defined = __webpack_require__(33);
6322
+
6323
+ module.exports = function(that, maxLength, fillString, left){
6324
+ var S = String(defined(that))
6325
+ , stringLength = S.length
6326
+ , fillStr = fillString === undefined ? ' ' : String(fillString)
6327
+ , intMaxLength = toLength(maxLength);
6328
+ if(intMaxLength <= stringLength || fillStr == '')return S;
6329
+ var fillLen = intMaxLength - stringLength
6330
+ , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
6331
+ if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen);
6332
+ return left ? stringFiller + S : S + stringFiller;
6333
+ };
6334
+
6335
+
6336
+ /***/ },
6337
+ /* 249 */
6338
+ /***/ function(module, exports, __webpack_require__) {
6339
+
6340
+ 'use strict';
6341
+ // https://github.com/tc39/proposal-string-pad-start-end
6342
+ var $export = __webpack_require__(6)
6343
+ , $pad = __webpack_require__(248);
6344
+
6345
+ $export($export.P, 'String', {
6346
+ padEnd: function padEnd(maxLength /*, fillString = ' ' */){
6347
+ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
6348
+ }
6349
+ });
6350
+
6351
+ /***/ },
6352
+ /* 250 */
6353
+ /***/ function(module, exports, __webpack_require__) {
6354
+
6355
+ 'use strict';
6356
+ // https://github.com/sebmarkbage/ecmascript-string-left-right-trim
6357
+ __webpack_require__(81)('trimLeft', function($trim){
6358
+ return function trimLeft(){
6359
+ return $trim(this, 1);
6360
+ };
6361
+ }, 'trimStart');
6362
+
6363
+ /***/ },
6364
+ /* 251 */
6365
+ /***/ function(module, exports, __webpack_require__) {
6366
+
6367
+ 'use strict';
6368
+ // https://github.com/sebmarkbage/ecmascript-string-left-right-trim
6369
+ __webpack_require__(81)('trimRight', function($trim){
6370
+ return function trimRight(){
6371
+ return $trim(this, 2);
6372
+ };
6373
+ }, 'trimEnd');
6374
+
6375
+ /***/ },
6376
+ /* 252 */
6377
+ /***/ function(module, exports, __webpack_require__) {
6378
+
6379
+ 'use strict';
6380
+ // https://tc39.github.io/String.prototype.matchAll/
6381
+ var $export = __webpack_require__(6)
6382
+ , defined = __webpack_require__(33)
6383
+ , toLength = __webpack_require__(35)
6384
+ , isRegExp = __webpack_require__(128)
6385
+ , getFlags = __webpack_require__(188)
6386
+ , RegExpProto = RegExp.prototype;
6387
+
6388
+ var $RegExpStringIterator = function(regexp, string){
6389
+ this._r = regexp;
6390
+ this._s = string;
6391
+ };
6392
+
6393
+ __webpack_require__(136)($RegExpStringIterator, 'RegExp String', function next(){
6394
+ var match = this._r.exec(this._s);
6395
+ return {value: match, done: match === null};
6396
+ });
6397
+
6398
+ $export($export.P, 'String', {
6399
+ matchAll: function matchAll(regexp){
6400
+ defined(this);
6401
+ if(!isRegExp(regexp))throw TypeError(regexp + ' is not a regexp!');
6402
+ var S = String(this)
6403
+ , flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp)
6404
+ , rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);
6405
+ rx.lastIndex = toLength(regexp.lastIndex);
6406
+ return new $RegExpStringIterator(rx, S);
6407
+ }
6408
+ });
6409
+
6410
+ /***/ },
6411
+ /* 253 */
6412
+ /***/ function(module, exports, __webpack_require__) {
6413
+
6414
+ __webpack_require__(25)('asyncIterator');
6415
+
6416
+ /***/ },
6417
+ /* 254 */
6418
+ /***/ function(module, exports, __webpack_require__) {
6419
+
6420
+ __webpack_require__(25)('observable');
6421
+
6422
+ /***/ },
6423
+ /* 255 */
6424
+ /***/ function(module, exports, __webpack_require__) {
6425
+
6426
+ // https://github.com/tc39/proposal-object-getownpropertydescriptors
6427
+ var $export = __webpack_require__(6)
6428
+ , ownKeys = __webpack_require__(221)
6429
+ , toIObject = __webpack_require__(30)
6430
+ , gOPD = __webpack_require__(49)
6431
+ , createProperty = __webpack_require__(155);
6432
+
6433
+ $export($export.S, 'Object', {
6434
+ getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){
6435
+ var O = toIObject(object)
6436
+ , getDesc = gOPD.f
6437
+ , keys = ownKeys(O)
6438
+ , result = {}
6439
+ , i = 0
6440
+ , key;
6441
+ while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key));
6442
+ return result;
6443
+ }
6444
+ });
6445
+
6446
+ /***/ },
6447
+ /* 256 */
6448
+ /***/ function(module, exports, __webpack_require__) {
6449
+
6450
+ // https://github.com/tc39/proposal-object-values-entries
6451
+ var $export = __webpack_require__(6)
6452
+ , $values = __webpack_require__(257)(false);
6453
+
6454
+ $export($export.S, 'Object', {
6455
+ values: function values(it){
6456
+ return $values(it);
6457
+ }
6458
+ });
6459
+
6460
+ /***/ },
6461
+ /* 257 */
6462
+ /***/ function(module, exports, __webpack_require__) {
6463
+
6464
+ var getKeys = __webpack_require__(28)
6465
+ , toIObject = __webpack_require__(30)
6466
+ , isEnum = __webpack_require__(42).f;
6467
+ module.exports = function(isEntries){
6468
+ return function(it){
6469
+ var O = toIObject(it)
6470
+ , keys = getKeys(O)
6471
+ , length = keys.length
6472
+ , i = 0
6473
+ , result = []
6474
+ , key;
6475
+ while(length > i)if(isEnum.call(O, key = keys[i++])){
6476
+ result.push(isEntries ? [key, O[key]] : O[key]);
6477
+ } return result;
6478
+ };
6479
+ };
6480
+
6481
+ /***/ },
6482
+ /* 258 */
6483
+ /***/ function(module, exports, __webpack_require__) {
6484
+
6485
+ // https://github.com/tc39/proposal-object-values-entries
6486
+ var $export = __webpack_require__(6)
6487
+ , $entries = __webpack_require__(257)(true);
6488
+
6489
+ $export($export.S, 'Object', {
6490
+ entries: function entries(it){
6491
+ return $entries(it);
6492
+ }
6493
+ });
6494
+
6495
+ /***/ },
6496
+ /* 259 */
6497
+ /***/ function(module, exports, __webpack_require__) {
6498
+
6499
+ 'use strict';
6500
+ var $export = __webpack_require__(6)
6501
+ , toObject = __webpack_require__(56)
6502
+ , aFunction = __webpack_require__(19)
6503
+ , $defineProperty = __webpack_require__(9);
6504
+
6505
+ // B.2.2.2 Object.prototype.__defineGetter__(P, getter)
6506
+ __webpack_require__(4) && $export($export.P + __webpack_require__(260), 'Object', {
6507
+ __defineGetter__: function __defineGetter__(P, getter){
6508
+ $defineProperty.f(toObject(this), P, {get: aFunction(getter), enumerable: true, configurable: true});
6509
+ }
6510
+ });
6511
+
6512
+ /***/ },
6513
+ /* 260 */
6514
+ /***/ function(module, exports, __webpack_require__) {
6515
+
6516
+ // Forced replacement prototype accessors methods
6517
+ module.exports = __webpack_require__(26)|| !__webpack_require__(5)(function(){
6518
+ var K = Math.random();
6519
+ // In FF throws only define methods
6520
+ __defineSetter__.call(null, K, function(){ /* empty */});
6521
+ delete __webpack_require__(2)[K];
6522
+ });
6523
+
6524
+ /***/ },
6525
+ /* 261 */
6526
+ /***/ function(module, exports, __webpack_require__) {
6527
+
6528
+ 'use strict';
6529
+ var $export = __webpack_require__(6)
6530
+ , toObject = __webpack_require__(56)
6531
+ , aFunction = __webpack_require__(19)
6532
+ , $defineProperty = __webpack_require__(9);
6533
+
6534
+ // B.2.2.3 Object.prototype.__defineSetter__(P, setter)
6535
+ __webpack_require__(4) && $export($export.P + __webpack_require__(260), 'Object', {
6536
+ __defineSetter__: function __defineSetter__(P, setter){
6537
+ $defineProperty.f(toObject(this), P, {set: aFunction(setter), enumerable: true, configurable: true});
6538
+ }
6539
+ });
6540
+
6541
+ /***/ },
6542
+ /* 262 */
6543
+ /***/ function(module, exports, __webpack_require__) {
6544
+
6545
+ 'use strict';
6546
+ var $export = __webpack_require__(6)
6547
+ , toObject = __webpack_require__(56)
6548
+ , toPrimitive = __webpack_require__(14)
6549
+ , getPrototypeOf = __webpack_require__(57)
6550
+ , getOwnPropertyDescriptor = __webpack_require__(49).f;
6551
+
6552
+ // B.2.2.4 Object.prototype.__lookupGetter__(P)
6553
+ __webpack_require__(4) && $export($export.P + __webpack_require__(260), 'Object', {
6554
+ __lookupGetter__: function __lookupGetter__(P){
6555
+ var O = toObject(this)
6556
+ , K = toPrimitive(P, true)
6557
+ , D;
6558
+ do {
6559
+ if(D = getOwnPropertyDescriptor(O, K))return D.get;
6560
+ } while(O = getPrototypeOf(O));
6561
+ }
6562
+ });
6563
+
6564
+ /***/ },
6565
+ /* 263 */
6566
+ /***/ function(module, exports, __webpack_require__) {
6567
+
6568
+ 'use strict';
6569
+ var $export = __webpack_require__(6)
6570
+ , toObject = __webpack_require__(56)
6571
+ , toPrimitive = __webpack_require__(14)
6572
+ , getPrototypeOf = __webpack_require__(57)
6573
+ , getOwnPropertyDescriptor = __webpack_require__(49).f;
6574
+
6575
+ // B.2.2.5 Object.prototype.__lookupSetter__(P)
6576
+ __webpack_require__(4) && $export($export.P + __webpack_require__(260), 'Object', {
6577
+ __lookupSetter__: function __lookupSetter__(P){
6578
+ var O = toObject(this)
6579
+ , K = toPrimitive(P, true)
6580
+ , D;
6581
+ do {
6582
+ if(D = getOwnPropertyDescriptor(O, K))return D.set;
6583
+ } while(O = getPrototypeOf(O));
6584
+ }
6585
+ });
6586
+
6587
+ /***/ },
6588
+ /* 264 */
6589
+ /***/ function(module, exports, __webpack_require__) {
6590
+
6591
+ // https://github.com/DavidBruant/Map-Set.prototype.toJSON
6592
+ var $export = __webpack_require__(6);
6593
+
6594
+ $export($export.P + $export.R, 'Map', {toJSON: __webpack_require__(265)('Map')});
6595
+
6596
+ /***/ },
6597
+ /* 265 */
6598
+ /***/ function(module, exports, __webpack_require__) {
6599
+
6600
+ // https://github.com/DavidBruant/Map-Set.prototype.toJSON
6601
+ var classof = __webpack_require__(73)
6602
+ , from = __webpack_require__(266);
6603
+ module.exports = function(NAME){
6604
+ return function toJSON(){
6605
+ if(classof(this) != NAME)throw TypeError(NAME + "#toJSON isn't generic");
6606
+ return from(this);
6607
+ };
6608
+ };
6609
+
6610
+ /***/ },
6611
+ /* 266 */
6612
+ /***/ function(module, exports, __webpack_require__) {
6613
+
6614
+ var forOf = __webpack_require__(198);
6615
+
6616
+ module.exports = function(iter, ITERATOR){
6617
+ var result = [];
6618
+ forOf(iter, false, result.push, result, ITERATOR);
6619
+ return result;
6620
+ };
6621
+
6622
+
6623
+ /***/ },
6624
+ /* 267 */
6625
+ /***/ function(module, exports, __webpack_require__) {
6626
+
6627
+ // https://github.com/DavidBruant/Map-Set.prototype.toJSON
6628
+ var $export = __webpack_require__(6);
6629
+
6630
+ $export($export.P + $export.R, 'Set', {toJSON: __webpack_require__(265)('Set')});
6631
+
6632
+ /***/ },
6633
+ /* 268 */
6634
+ /***/ function(module, exports, __webpack_require__) {
6635
+
6636
+ // https://github.com/ljharb/proposal-global
6637
+ var $export = __webpack_require__(6);
6638
+
6639
+ $export($export.S, 'System', {global: __webpack_require__(2)});
6640
+
6641
+ /***/ },
6642
+ /* 269 */
6643
+ /***/ function(module, exports, __webpack_require__) {
6644
+
6645
+ // https://github.com/ljharb/proposal-is-error
6646
+ var $export = __webpack_require__(6)
6647
+ , cof = __webpack_require__(32);
6648
+
6649
+ $export($export.S, 'Error', {
6650
+ isError: function isError(it){
6651
+ return cof(it) === 'Error';
6652
+ }
6653
+ });
6654
+
6655
+ /***/ },
6656
+ /* 270 */
6657
+ /***/ function(module, exports, __webpack_require__) {
6658
+
6659
+ // https://gist.github.com/BrendanEich/4294d5c212a6d2254703
6660
+ var $export = __webpack_require__(6);
6661
+
6662
+ $export($export.S, 'Math', {
6663
+ iaddh: function iaddh(x0, x1, y0, y1){
6664
+ var $x0 = x0 >>> 0
6665
+ , $x1 = x1 >>> 0
6666
+ , $y0 = y0 >>> 0;
6667
+ return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;
6668
+ }
6669
+ });
6670
+
6671
+ /***/ },
6672
+ /* 271 */
6673
+ /***/ function(module, exports, __webpack_require__) {
6674
+
6675
+ // https://gist.github.com/BrendanEich/4294d5c212a6d2254703
6676
+ var $export = __webpack_require__(6);
6677
+
6678
+ $export($export.S, 'Math', {
6679
+ isubh: function isubh(x0, x1, y0, y1){
6680
+ var $x0 = x0 >>> 0
6681
+ , $x1 = x1 >>> 0
6682
+ , $y0 = y0 >>> 0;
6683
+ return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;
6684
+ }
6685
+ });
6686
+
6687
+ /***/ },
6688
+ /* 272 */
6689
+ /***/ function(module, exports, __webpack_require__) {
6690
+
6691
+ // https://gist.github.com/BrendanEich/4294d5c212a6d2254703
6692
+ var $export = __webpack_require__(6);
6693
+
6694
+ $export($export.S, 'Math', {
6695
+ imulh: function imulh(u, v){
6696
+ var UINT16 = 0xffff
6697
+ , $u = +u
6698
+ , $v = +v
6699
+ , u0 = $u & UINT16
6700
+ , v0 = $v & UINT16
6701
+ , u1 = $u >> 16
6702
+ , v1 = $v >> 16
6703
+ , t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
6704
+ return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);
6705
+ }
6706
+ });
6707
+
6708
+ /***/ },
6709
+ /* 273 */
6710
+ /***/ function(module, exports, __webpack_require__) {
6711
+
6712
+ // https://gist.github.com/BrendanEich/4294d5c212a6d2254703
6713
+ var $export = __webpack_require__(6);
6714
+
6715
+ $export($export.S, 'Math', {
6716
+ umulh: function umulh(u, v){
6717
+ var UINT16 = 0xffff
6718
+ , $u = +u
6719
+ , $v = +v
6720
+ , u0 = $u & UINT16
6721
+ , v0 = $v & UINT16
6722
+ , u1 = $u >>> 16
6723
+ , v1 = $v >>> 16
6724
+ , t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
6725
+ return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);
6726
+ }
6727
+ });
6728
+
6729
+ /***/ },
6730
+ /* 274 */
6731
+ /***/ function(module, exports, __webpack_require__) {
6732
+
6733
+ var metadata = __webpack_require__(275)
6734
+ , anObject = __webpack_require__(10)
6735
+ , toMetaKey = metadata.key
6736
+ , ordinaryDefineOwnMetadata = metadata.set;
6737
+
6738
+ metadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){
6739
+ ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));
6740
+ }});
6741
+
6742
+ /***/ },
6743
+ /* 275 */
6744
+ /***/ function(module, exports, __webpack_require__) {
6745
+
6746
+ var Map = __webpack_require__(203)
6747
+ , $export = __webpack_require__(6)
6748
+ , shared = __webpack_require__(21)('metadata')
6749
+ , store = shared.store || (shared.store = new (__webpack_require__(207)));
6750
+
6751
+ var getOrCreateMetadataMap = function(target, targetKey, create){
6752
+ var targetMetadata = store.get(target);
6753
+ if(!targetMetadata){
6754
+ if(!create)return undefined;
6755
+ store.set(target, targetMetadata = new Map);
6756
+ }
6757
+ var keyMetadata = targetMetadata.get(targetKey);
6758
+ if(!keyMetadata){
6759
+ if(!create)return undefined;
6760
+ targetMetadata.set(targetKey, keyMetadata = new Map);
6761
+ } return keyMetadata;
6762
+ };
6763
+ var ordinaryHasOwnMetadata = function(MetadataKey, O, P){
6764
+ var metadataMap = getOrCreateMetadataMap(O, P, false);
6765
+ return metadataMap === undefined ? false : metadataMap.has(MetadataKey);
6766
+ };
6767
+ var ordinaryGetOwnMetadata = function(MetadataKey, O, P){
6768
+ var metadataMap = getOrCreateMetadataMap(O, P, false);
6769
+ return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);
6770
+ };
6771
+ var ordinaryDefineOwnMetadata = function(MetadataKey, MetadataValue, O, P){
6772
+ getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);
6773
+ };
6774
+ var ordinaryOwnMetadataKeys = function(target, targetKey){
6775
+ var metadataMap = getOrCreateMetadataMap(target, targetKey, false)
6776
+ , keys = [];
6777
+ if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); });
6778
+ return keys;
6779
+ };
6780
+ var toMetaKey = function(it){
6781
+ return it === undefined || typeof it == 'symbol' ? it : String(it);
6782
+ };
6783
+ var exp = function(O){
6784
+ $export($export.S, 'Reflect', O);
6785
+ };
6786
+
6787
+ module.exports = {
6788
+ store: store,
6789
+ map: getOrCreateMetadataMap,
6790
+ has: ordinaryHasOwnMetadata,
6791
+ get: ordinaryGetOwnMetadata,
6792
+ set: ordinaryDefineOwnMetadata,
6793
+ keys: ordinaryOwnMetadataKeys,
6794
+ key: toMetaKey,
6795
+ exp: exp
6796
+ };
6797
+
6798
+ /***/ },
6799
+ /* 276 */
6800
+ /***/ function(module, exports, __webpack_require__) {
6801
+
6802
+ var metadata = __webpack_require__(275)
6803
+ , anObject = __webpack_require__(10)
6804
+ , toMetaKey = metadata.key
6805
+ , getOrCreateMetadataMap = metadata.map
6806
+ , store = metadata.store;
6807
+
6808
+ metadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){
6809
+ var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2])
6810
+ , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);
6811
+ if(metadataMap === undefined || !metadataMap['delete'](metadataKey))return false;
6812
+ if(metadataMap.size)return true;
6813
+ var targetMetadata = store.get(target);
6814
+ targetMetadata['delete'](targetKey);
6815
+ return !!targetMetadata.size || store['delete'](target);
6816
+ }});
6817
+
6818
+ /***/ },
6819
+ /* 277 */
6820
+ /***/ function(module, exports, __webpack_require__) {
6821
+
6822
+ var metadata = __webpack_require__(275)
6823
+ , anObject = __webpack_require__(10)
6824
+ , getPrototypeOf = __webpack_require__(57)
6825
+ , ordinaryHasOwnMetadata = metadata.has
6826
+ , ordinaryGetOwnMetadata = metadata.get
6827
+ , toMetaKey = metadata.key;
6828
+
6829
+ var ordinaryGetMetadata = function(MetadataKey, O, P){
6830
+ var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
6831
+ if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P);
6832
+ var parent = getPrototypeOf(O);
6833
+ return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;
6834
+ };
6835
+
6836
+ metadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){
6837
+ return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
6838
+ }});
6839
+
6840
+ /***/ },
6841
+ /* 278 */
6842
+ /***/ function(module, exports, __webpack_require__) {
6843
+
6844
+ var Set = __webpack_require__(206)
6845
+ , from = __webpack_require__(266)
6846
+ , metadata = __webpack_require__(275)
6847
+ , anObject = __webpack_require__(10)
6848
+ , getPrototypeOf = __webpack_require__(57)
6849
+ , ordinaryOwnMetadataKeys = metadata.keys
6850
+ , toMetaKey = metadata.key;
6851
+
6852
+ var ordinaryMetadataKeys = function(O, P){
6853
+ var oKeys = ordinaryOwnMetadataKeys(O, P)
6854
+ , parent = getPrototypeOf(O);
6855
+ if(parent === null)return oKeys;
6856
+ var pKeys = ordinaryMetadataKeys(parent, P);
6857
+ return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;
6858
+ };
6859
+
6860
+ metadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){
6861
+ return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
6862
+ }});
6863
+
6864
+ /***/ },
6865
+ /* 279 */
6866
+ /***/ function(module, exports, __webpack_require__) {
6867
+
6868
+ var metadata = __webpack_require__(275)
6869
+ , anObject = __webpack_require__(10)
6870
+ , ordinaryGetOwnMetadata = metadata.get
6871
+ , toMetaKey = metadata.key;
6872
+
6873
+ metadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){
6874
+ return ordinaryGetOwnMetadata(metadataKey, anObject(target)
6875
+ , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
6876
+ }});
6877
+
6878
+ /***/ },
6879
+ /* 280 */
6880
+ /***/ function(module, exports, __webpack_require__) {
6881
+
6882
+ var metadata = __webpack_require__(275)
6883
+ , anObject = __webpack_require__(10)
6884
+ , ordinaryOwnMetadataKeys = metadata.keys
6885
+ , toMetaKey = metadata.key;
6886
+
6887
+ metadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){
6888
+ return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
6889
+ }});
6890
+
6891
+ /***/ },
6892
+ /* 281 */
6893
+ /***/ function(module, exports, __webpack_require__) {
6894
+
6895
+ var metadata = __webpack_require__(275)
6896
+ , anObject = __webpack_require__(10)
6897
+ , getPrototypeOf = __webpack_require__(57)
6898
+ , ordinaryHasOwnMetadata = metadata.has
6899
+ , toMetaKey = metadata.key;
6900
+
6901
+ var ordinaryHasMetadata = function(MetadataKey, O, P){
6902
+ var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
6903
+ if(hasOwn)return true;
6904
+ var parent = getPrototypeOf(O);
6905
+ return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;
6906
+ };
6907
+
6908
+ metadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){
6909
+ return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
6910
+ }});
6911
+
6912
+ /***/ },
6913
+ /* 282 */
6914
+ /***/ function(module, exports, __webpack_require__) {
6915
+
6916
+ var metadata = __webpack_require__(275)
6917
+ , anObject = __webpack_require__(10)
6918
+ , ordinaryHasOwnMetadata = metadata.has
6919
+ , toMetaKey = metadata.key;
6920
+
6921
+ metadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){
6922
+ return ordinaryHasOwnMetadata(metadataKey, anObject(target)
6923
+ , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
6924
+ }});
6925
+
6926
+ /***/ },
6927
+ /* 283 */
6928
+ /***/ function(module, exports, __webpack_require__) {
6929
+
6930
+ var metadata = __webpack_require__(275)
6931
+ , anObject = __webpack_require__(10)
6932
+ , aFunction = __webpack_require__(19)
6933
+ , toMetaKey = metadata.key
6934
+ , ordinaryDefineOwnMetadata = metadata.set;
6935
+
6936
+ metadata.exp({metadata: function metadata(metadataKey, metadataValue){
6937
+ return function decorator(target, targetKey){
6938
+ ordinaryDefineOwnMetadata(
6939
+ metadataKey, metadataValue,
6940
+ (targetKey !== undefined ? anObject : aFunction)(target),
6941
+ toMetaKey(targetKey)
6942
+ );
6943
+ };
6944
+ }});
6945
+
6946
+ /***/ },
6947
+ /* 284 */
6948
+ /***/ function(module, exports, __webpack_require__) {
6949
+
6950
+ // https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask
6951
+ var $export = __webpack_require__(6)
6952
+ , microtask = __webpack_require__(201)()
6953
+ , process = __webpack_require__(2).process
6954
+ , isNode = __webpack_require__(32)(process) == 'process';
6955
+
6956
+ $export($export.G, {
6957
+ asap: function asap(fn){
6958
+ var domain = isNode && process.domain;
6959
+ microtask(domain ? domain.bind(fn) : fn);
6960
+ }
6961
+ });
6962
+
6963
+ /***/ },
6964
+ /* 285 */
6965
+ /***/ function(module, exports, __webpack_require__) {
6966
+
6967
+ 'use strict';
6968
+ // https://github.com/zenparsing/es-observable
6969
+ var $export = __webpack_require__(6)
6970
+ , global = __webpack_require__(2)
6971
+ , core = __webpack_require__(7)
6972
+ , microtask = __webpack_require__(201)()
6973
+ , OBSERVABLE = __webpack_require__(23)('observable')
6974
+ , aFunction = __webpack_require__(19)
6975
+ , anObject = __webpack_require__(10)
6976
+ , anInstance = __webpack_require__(197)
6977
+ , redefineAll = __webpack_require__(202)
6978
+ , hide = __webpack_require__(8)
6979
+ , forOf = __webpack_require__(198)
6980
+ , RETURN = forOf.RETURN;
6981
+
6982
+ var getMethod = function(fn){
6983
+ return fn == null ? undefined : aFunction(fn);
6984
+ };
6985
+
6986
+ var cleanupSubscription = function(subscription){
6987
+ var cleanup = subscription._c;
6988
+ if(cleanup){
6989
+ subscription._c = undefined;
6990
+ cleanup();
6991
+ }
6992
+ };
6993
+
6994
+ var subscriptionClosed = function(subscription){
6995
+ return subscription._o === undefined;
6996
+ };
6997
+
6998
+ var closeSubscription = function(subscription){
6999
+ if(!subscriptionClosed(subscription)){
7000
+ subscription._o = undefined;
7001
+ cleanupSubscription(subscription);
7002
+ }
7003
+ };
7004
+
7005
+ var Subscription = function(observer, subscriber){
7006
+ anObject(observer);
7007
+ this._c = undefined;
7008
+ this._o = observer;
7009
+ observer = new SubscriptionObserver(this);
7010
+ try {
7011
+ var cleanup = subscriber(observer)
7012
+ , subscription = cleanup;
7013
+ if(cleanup != null){
7014
+ if(typeof cleanup.unsubscribe === 'function')cleanup = function(){ subscription.unsubscribe(); };
7015
+ else aFunction(cleanup);
7016
+ this._c = cleanup;
7017
+ }
7018
+ } catch(e){
7019
+ observer.error(e);
7020
+ return;
7021
+ } if(subscriptionClosed(this))cleanupSubscription(this);
7022
+ };
7023
+
7024
+ Subscription.prototype = redefineAll({}, {
7025
+ unsubscribe: function unsubscribe(){ closeSubscription(this); }
7026
+ });
7027
+
7028
+ var SubscriptionObserver = function(subscription){
7029
+ this._s = subscription;
7030
+ };
7031
+
7032
+ SubscriptionObserver.prototype = redefineAll({}, {
7033
+ next: function next(value){
7034
+ var subscription = this._s;
7035
+ if(!subscriptionClosed(subscription)){
7036
+ var observer = subscription._o;
7037
+ try {
7038
+ var m = getMethod(observer.next);
7039
+ if(m)return m.call(observer, value);
7040
+ } catch(e){
7041
+ try {
7042
+ closeSubscription(subscription);
7043
+ } finally {
7044
+ throw e;
7045
+ }
7046
+ }
7047
+ }
7048
+ },
7049
+ error: function error(value){
7050
+ var subscription = this._s;
7051
+ if(subscriptionClosed(subscription))throw value;
7052
+ var observer = subscription._o;
7053
+ subscription._o = undefined;
7054
+ try {
7055
+ var m = getMethod(observer.error);
7056
+ if(!m)throw value;
7057
+ value = m.call(observer, value);
7058
+ } catch(e){
7059
+ try {
7060
+ cleanupSubscription(subscription);
7061
+ } finally {
7062
+ throw e;
7063
+ }
7064
+ } cleanupSubscription(subscription);
7065
+ return value;
7066
+ },
7067
+ complete: function complete(value){
7068
+ var subscription = this._s;
7069
+ if(!subscriptionClosed(subscription)){
7070
+ var observer = subscription._o;
7071
+ subscription._o = undefined;
7072
+ try {
7073
+ var m = getMethod(observer.complete);
7074
+ value = m ? m.call(observer, value) : undefined;
7075
+ } catch(e){
7076
+ try {
7077
+ cleanupSubscription(subscription);
7078
+ } finally {
7079
+ throw e;
7080
+ }
7081
+ } cleanupSubscription(subscription);
7082
+ return value;
7083
+ }
7084
+ }
7085
+ });
7086
+
7087
+ var $Observable = function Observable(subscriber){
7088
+ anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);
7089
+ };
7090
+
7091
+ redefineAll($Observable.prototype, {
7092
+ subscribe: function subscribe(observer){
7093
+ return new Subscription(observer, this._f);
7094
+ },
7095
+ forEach: function forEach(fn){
7096
+ var that = this;
7097
+ return new (core.Promise || global.Promise)(function(resolve, reject){
7098
+ aFunction(fn);
7099
+ var subscription = that.subscribe({
7100
+ next : function(value){
7101
+ try {
7102
+ return fn(value);
7103
+ } catch(e){
7104
+ reject(e);
7105
+ subscription.unsubscribe();
7106
+ }
7107
+ },
7108
+ error: reject,
7109
+ complete: resolve
7110
+ });
7111
+ });
7112
+ }
7113
+ });
7114
+
7115
+ redefineAll($Observable, {
7116
+ from: function from(x){
7117
+ var C = typeof this === 'function' ? this : $Observable;
7118
+ var method = getMethod(anObject(x)[OBSERVABLE]);
7119
+ if(method){
7120
+ var observable = anObject(method.call(x));
7121
+ return observable.constructor === C ? observable : new C(function(observer){
7122
+ return observable.subscribe(observer);
7123
+ });
7124
+ }
7125
+ return new C(function(observer){
7126
+ var done = false;
7127
+ microtask(function(){
7128
+ if(!done){
7129
+ try {
7130
+ if(forOf(x, false, function(it){
7131
+ observer.next(it);
7132
+ if(done)return RETURN;
7133
+ }) === RETURN)return;
7134
+ } catch(e){
7135
+ if(done)throw e;
7136
+ observer.error(e);
7137
+ return;
7138
+ } observer.complete();
7139
+ }
7140
+ });
7141
+ return function(){ done = true; };
7142
+ });
7143
+ },
7144
+ of: function of(){
7145
+ for(var i = 0, l = arguments.length, items = Array(l); i < l;)items[i] = arguments[i++];
7146
+ return new (typeof this === 'function' ? this : $Observable)(function(observer){
7147
+ var done = false;
7148
+ microtask(function(){
7149
+ if(!done){
7150
+ for(var i = 0; i < items.length; ++i){
7151
+ observer.next(items[i]);
7152
+ if(done)return;
7153
+ } observer.complete();
7154
+ }
7155
+ });
7156
+ return function(){ done = true; };
7157
+ });
7158
+ }
7159
+ });
7160
+
7161
+ hide($Observable.prototype, OBSERVABLE, function(){ return this; });
7162
+
7163
+ $export($export.G, {Observable: $Observable});
7164
+
7165
+ __webpack_require__(186)('Observable');
7166
+
7167
+ /***/ },
7168
+ /* 286 */
7169
+ /***/ function(module, exports, __webpack_require__) {
7170
+
7171
+ var $export = __webpack_require__(6)
7172
+ , $task = __webpack_require__(200);
7173
+ $export($export.G + $export.B, {
7174
+ setImmediate: $task.set,
7175
+ clearImmediate: $task.clear
7176
+ });
7177
+
7178
+ /***/ },
7179
+ /* 287 */
7180
+ /***/ function(module, exports, __webpack_require__) {
7181
+
7182
+ var $iterators = __webpack_require__(183)
7183
+ , redefine = __webpack_require__(16)
7184
+ , global = __webpack_require__(2)
7185
+ , hide = __webpack_require__(8)
7186
+ , Iterators = __webpack_require__(135)
7187
+ , wks = __webpack_require__(23)
7188
+ , ITERATOR = wks('iterator')
7189
+ , TO_STRING_TAG = wks('toStringTag')
7190
+ , ArrayValues = Iterators.Array;
7191
+
7192
+ for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
7193
+ var NAME = collections[i]
7194
+ , Collection = global[NAME]
7195
+ , proto = Collection && Collection.prototype
7196
+ , key;
7197
+ if(proto){
7198
+ if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues);
7199
+ if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);
7200
+ Iterators[NAME] = ArrayValues;
7201
+ for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true);
7202
+ }
7203
+ }
7204
+
7205
+ /***/ },
7206
+ /* 288 */
7207
+ /***/ function(module, exports, __webpack_require__) {
7208
+
7209
+ // ie9- setTimeout & setInterval additional parameters fix
7210
+ var global = __webpack_require__(2)
7211
+ , $export = __webpack_require__(6)
7212
+ , invoke = __webpack_require__(76)
7213
+ , partial = __webpack_require__(289)
7214
+ , navigator = global.navigator
7215
+ , MSIE = !!navigator && /MSIE .\./.test(navigator.userAgent); // <- dirty ie9- check
7216
+ var wrap = function(set){
7217
+ return MSIE ? function(fn, time /*, ...args */){
7218
+ return set(invoke(
7219
+ partial,
7220
+ [].slice.call(arguments, 2),
7221
+ typeof fn == 'function' ? fn : Function(fn)
7222
+ ), time);
7223
+ } : set;
7224
+ };
7225
+ $export($export.G + $export.B + $export.F * MSIE, {
7226
+ setTimeout: wrap(global.setTimeout),
7227
+ setInterval: wrap(global.setInterval)
7228
+ });
7229
+
7230
+ /***/ },
7231
+ /* 289 */
7232
+ /***/ function(module, exports, __webpack_require__) {
7233
+
7234
+ 'use strict';
7235
+ var path = __webpack_require__(290)
7236
+ , invoke = __webpack_require__(76)
7237
+ , aFunction = __webpack_require__(19);
7238
+ module.exports = function(/* ...pargs */){
7239
+ var fn = aFunction(this)
7240
+ , length = arguments.length
7241
+ , pargs = Array(length)
7242
+ , i = 0
7243
+ , _ = path._
7244
+ , holder = false;
7245
+ while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;
7246
+ return function(/* ...args */){
7247
+ var that = this
7248
+ , aLen = arguments.length
7249
+ , j = 0, k = 0, args;
7250
+ if(!holder && !aLen)return invoke(fn, pargs, that);
7251
+ args = pargs.slice();
7252
+ if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++];
7253
+ while(aLen > k)args.push(arguments[k++]);
7254
+ return invoke(fn, args, that);
7255
+ };
7256
+ };
7257
+
7258
+ /***/ },
7259
+ /* 290 */
7260
+ /***/ function(module, exports, __webpack_require__) {
7261
+
7262
+ module.exports = __webpack_require__(2);
7263
+
7264
+ /***/ },
7265
+ /* 291 */
7266
+ /***/ function(module, exports, __webpack_require__) {
7267
+
7268
+ 'use strict';
7269
+ var ctx = __webpack_require__(18)
7270
+ , $export = __webpack_require__(6)
7271
+ , createDesc = __webpack_require__(15)
7272
+ , assign = __webpack_require__(67)
7273
+ , create = __webpack_require__(44)
7274
+ , getPrototypeOf = __webpack_require__(57)
7275
+ , getKeys = __webpack_require__(28)
7276
+ , dP = __webpack_require__(9)
7277
+ , keyOf = __webpack_require__(27)
7278
+ , aFunction = __webpack_require__(19)
7279
+ , forOf = __webpack_require__(198)
7280
+ , isIterable = __webpack_require__(292)
7281
+ , $iterCreate = __webpack_require__(136)
7282
+ , step = __webpack_require__(184)
7283
+ , isObject = __webpack_require__(11)
7284
+ , toIObject = __webpack_require__(30)
7285
+ , DESCRIPTORS = __webpack_require__(4)
7286
+ , has = __webpack_require__(3);
7287
+
7288
+ // 0 -> Dict.forEach
7289
+ // 1 -> Dict.map
7290
+ // 2 -> Dict.filter
7291
+ // 3 -> Dict.some
7292
+ // 4 -> Dict.every
7293
+ // 5 -> Dict.find
7294
+ // 6 -> Dict.findKey
7295
+ // 7 -> Dict.mapPairs
7296
+ var createDictMethod = function(TYPE){
7297
+ var IS_MAP = TYPE == 1
7298
+ , IS_EVERY = TYPE == 4;
7299
+ return function(object, callbackfn, that /* = undefined */){
7300
+ var f = ctx(callbackfn, that, 3)
7301
+ , O = toIObject(object)
7302
+ , result = IS_MAP || TYPE == 7 || TYPE == 2
7303
+ ? new (typeof this == 'function' ? this : Dict) : undefined
7304
+ , key, val, res;
7305
+ for(key in O)if(has(O, key)){
7306
+ val = O[key];
7307
+ res = f(val, key, object);
7308
+ if(TYPE){
7309
+ if(IS_MAP)result[key] = res; // map
7310
+ else if(res)switch(TYPE){
7311
+ case 2: result[key] = val; break; // filter
7312
+ case 3: return true; // some
7313
+ case 5: return val; // find
7314
+ case 6: return key; // findKey
7315
+ case 7: result[res[0]] = res[1]; // mapPairs
7316
+ } else if(IS_EVERY)return false; // every
7317
+ }
7318
+ }
7319
+ return TYPE == 3 || IS_EVERY ? IS_EVERY : result;
7320
+ };
7321
+ };
7322
+ var findKey = createDictMethod(6);
7323
+
7324
+ var createDictIter = function(kind){
7325
+ return function(it){
7326
+ return new DictIterator(it, kind);
7327
+ };
7328
+ };
7329
+ var DictIterator = function(iterated, kind){
7330
+ this._t = toIObject(iterated); // target
7331
+ this._a = getKeys(iterated); // keys
7332
+ this._i = 0; // next index
7333
+ this._k = kind; // kind
7334
+ };
7335
+ $iterCreate(DictIterator, 'Dict', function(){
7336
+ var that = this
7337
+ , O = that._t
7338
+ , keys = that._a
7339
+ , kind = that._k
7340
+ , key;
7341
+ do {
7342
+ if(that._i >= keys.length){
7343
+ that._t = undefined;
7344
+ return step(1);
7345
+ }
7346
+ } while(!has(O, key = keys[that._i++]));
7347
+ if(kind == 'keys' )return step(0, key);
7348
+ if(kind == 'values')return step(0, O[key]);
7349
+ return step(0, [key, O[key]]);
7350
+ });
7351
+
7352
+ function Dict(iterable){
7353
+ var dict = create(null);
7354
+ if(iterable != undefined){
7355
+ if(isIterable(iterable)){
7356
+ forOf(iterable, true, function(key, value){
7357
+ dict[key] = value;
7358
+ });
7359
+ } else assign(dict, iterable);
7360
+ }
7361
+ return dict;
7362
+ }
7363
+ Dict.prototype = null;
7364
+
7365
+ function reduce(object, mapfn, init){
7366
+ aFunction(mapfn);
7367
+ var O = toIObject(object)
7368
+ , keys = getKeys(O)
7369
+ , length = keys.length
7370
+ , i = 0
7371
+ , memo, key;
7372
+ if(arguments.length < 3){
7373
+ if(!length)throw TypeError('Reduce of empty object with no initial value');
7374
+ memo = O[keys[i++]];
7375
+ } else memo = Object(init);
7376
+ while(length > i)if(has(O, key = keys[i++])){
7377
+ memo = mapfn(memo, O[key], key, object);
7378
+ }
7379
+ return memo;
7380
+ }
7381
+
7382
+ function includes(object, el){
7383
+ return (el == el ? keyOf(object, el) : findKey(object, function(it){
7384
+ return it != it;
7385
+ })) !== undefined;
7386
+ }
7387
+
7388
+ function get(object, key){
7389
+ if(has(object, key))return object[key];
7390
+ }
7391
+ function set(object, key, value){
7392
+ if(DESCRIPTORS && key in Object)dP.f(object, key, createDesc(0, value));
7393
+ else object[key] = value;
7394
+ return object;
7395
+ }
7396
+
7397
+ function isDict(it){
7398
+ return isObject(it) && getPrototypeOf(it) === Dict.prototype;
7399
+ }
7400
+
7401
+ $export($export.G + $export.F, {Dict: Dict});
7402
+
7403
+ $export($export.S, 'Dict', {
7404
+ keys: createDictIter('keys'),
7405
+ values: createDictIter('values'),
7406
+ entries: createDictIter('entries'),
7407
+ forEach: createDictMethod(0),
7408
+ map: createDictMethod(1),
7409
+ filter: createDictMethod(2),
7410
+ some: createDictMethod(3),
7411
+ every: createDictMethod(4),
7412
+ find: createDictMethod(5),
7413
+ findKey: findKey,
7414
+ mapPairs: createDictMethod(7),
7415
+ reduce: reduce,
7416
+ keyOf: keyOf,
7417
+ includes: includes,
7418
+ has: has,
7419
+ get: get,
7420
+ set: set,
7421
+ isDict: isDict
7422
+ });
7423
+
7424
+ /***/ },
7425
+ /* 292 */
7426
+ /***/ function(module, exports, __webpack_require__) {
7427
+
7428
+ var classof = __webpack_require__(73)
7429
+ , ITERATOR = __webpack_require__(23)('iterator')
7430
+ , Iterators = __webpack_require__(135);
7431
+ module.exports = __webpack_require__(7).isIterable = function(it){
7432
+ var O = Object(it);
7433
+ return O[ITERATOR] !== undefined
7434
+ || '@@iterator' in O
7435
+ || Iterators.hasOwnProperty(classof(O));
7436
+ };
7437
+
7438
+ /***/ },
7439
+ /* 293 */
7440
+ /***/ function(module, exports, __webpack_require__) {
7441
+
7442
+ var anObject = __webpack_require__(10)
7443
+ , get = __webpack_require__(156);
7444
+ module.exports = __webpack_require__(7).getIterator = function(it){
7445
+ var iterFn = get(it);
7446
+ if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');
7447
+ return anObject(iterFn.call(it));
7448
+ };
7449
+
7450
+ /***/ },
7451
+ /* 294 */
7452
+ /***/ function(module, exports, __webpack_require__) {
7453
+
7454
+ var global = __webpack_require__(2)
7455
+ , core = __webpack_require__(7)
7456
+ , $export = __webpack_require__(6)
7457
+ , partial = __webpack_require__(289);
7458
+ // https://esdiscuss.org/topic/promise-returning-delay-function
7459
+ $export($export.G + $export.F, {
7460
+ delay: function delay(time){
7461
+ return new (core.Promise || global.Promise)(function(resolve){
7462
+ setTimeout(partial.call(resolve, true), time);
7463
+ });
7464
+ }
7465
+ });
7466
+
7467
+ /***/ },
7468
+ /* 295 */
7469
+ /***/ function(module, exports, __webpack_require__) {
7470
+
7471
+ var path = __webpack_require__(290)
7472
+ , $export = __webpack_require__(6);
7473
+
7474
+ // Placeholder
7475
+ __webpack_require__(7)._ = path._ = path._ || {};
7476
+
7477
+ $export($export.P + $export.F, 'Function', {part: __webpack_require__(289)});
7478
+
7479
+ /***/ },
7480
+ /* 296 */
7481
+ /***/ function(module, exports, __webpack_require__) {
7482
+
7483
+ var $export = __webpack_require__(6);
7484
+
7485
+ $export($export.S + $export.F, 'Object', {isObject: __webpack_require__(11)});
7486
+
7487
+ /***/ },
7488
+ /* 297 */
7489
+ /***/ function(module, exports, __webpack_require__) {
7490
+
7491
+ var $export = __webpack_require__(6);
7492
+
7493
+ $export($export.S + $export.F, 'Object', {classof: __webpack_require__(73)});
7494
+
7495
+ /***/ },
7496
+ /* 298 */
7497
+ /***/ function(module, exports, __webpack_require__) {
7498
+
7499
+ var $export = __webpack_require__(6)
7500
+ , define = __webpack_require__(299);
7501
+
7502
+ $export($export.S + $export.F, 'Object', {define: define});
7503
+
7504
+ /***/ },
7505
+ /* 299 */
7506
+ /***/ function(module, exports, __webpack_require__) {
7507
+
7508
+ var dP = __webpack_require__(9)
7509
+ , gOPD = __webpack_require__(49)
7510
+ , ownKeys = __webpack_require__(221)
7511
+ , toIObject = __webpack_require__(30);
7512
+
7513
+ module.exports = function define(target, mixin){
7514
+ var keys = ownKeys(toIObject(mixin))
7515
+ , length = keys.length
7516
+ , i = 0, key;
7517
+ while(length > i)dP.f(target, key = keys[i++], gOPD.f(mixin, key));
7518
+ return target;
7519
+ };
7520
+
7521
+ /***/ },
7522
+ /* 300 */
7523
+ /***/ function(module, exports, __webpack_require__) {
7524
+
7525
+ var $export = __webpack_require__(6)
7526
+ , define = __webpack_require__(299)
7527
+ , create = __webpack_require__(44);
7528
+
7529
+ $export($export.S + $export.F, 'Object', {
7530
+ make: function(proto, mixin){
7531
+ return define(create(proto), mixin);
7532
+ }
7533
+ });
7534
+
7535
+ /***/ },
7536
+ /* 301 */
7537
+ /***/ function(module, exports, __webpack_require__) {
7538
+
7539
+ 'use strict';
7540
+ __webpack_require__(134)(Number, 'Number', function(iterated){
7541
+ this._l = +iterated;
7542
+ this._i = 0;
7543
+ }, function(){
7544
+ var i = this._i++
7545
+ , done = !(i < this._l);
7546
+ return {done: done, value: done ? undefined : i};
7547
+ });
7548
+
7549
+ /***/ },
7550
+ /* 302 */
7551
+ /***/ function(module, exports, __webpack_require__) {
7552
+
7553
+ // https://github.com/benjamingr/RexExp.escape
7554
+ var $export = __webpack_require__(6)
7555
+ , $re = __webpack_require__(303)(/[\\^$*+?.()|[\]{}]/g, '\\$&');
7556
+
7557
+ $export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});
7558
+
7559
+
7560
+ /***/ },
7561
+ /* 303 */
7562
+ /***/ function(module, exports) {
7563
+
7564
+ module.exports = function(regExp, replace){
7565
+ var replacer = replace === Object(replace) ? function(part){
7566
+ return replace[part];
7567
+ } : replace;
7568
+ return function(it){
7569
+ return String(it).replace(regExp, replacer);
7570
+ };
7571
+ };
7572
+
7573
+ /***/ },
7574
+ /* 304 */
7575
+ /***/ function(module, exports, __webpack_require__) {
7576
+
7577
+ 'use strict';
7578
+ var $export = __webpack_require__(6);
7579
+ var $re = __webpack_require__(303)(/[&<>"']/g, {
7580
+ '&': '&amp;',
7581
+ '<': '&lt;',
7582
+ '>': '&gt;',
7583
+ '"': '&quot;',
7584
+ "'": '&apos;'
7585
+ });
7586
+
7587
+ $export($export.P + $export.F, 'String', {escapeHTML: function escapeHTML(){ return $re(this); }});
7588
+
7589
+ /***/ },
7590
+ /* 305 */
7591
+ /***/ function(module, exports, __webpack_require__) {
7592
+
7593
+ 'use strict';
7594
+ var $export = __webpack_require__(6);
7595
+ var $re = __webpack_require__(303)(/&(?:amp|lt|gt|quot|apos);/g, {
7596
+ '&amp;': '&',
7597
+ '&lt;': '<',
7598
+ '&gt;': '>',
7599
+ '&quot;': '"',
7600
+ '&apos;': "'"
7601
+ });
7602
+
7603
+ $export($export.P + $export.F, 'String', {unescapeHTML: function unescapeHTML(){ return $re(this); }});
7604
+
7605
+ /***/ }
7606
+ /******/ ]);
7607
+ // CommonJS export
7608
+ if(typeof module != 'undefined' && module.exports)module.exports = __e;
7609
+ // RequireJS export
7610
+ else if(typeof define == 'function' && define.amd)define(function(){return __e});
7611
+ // Export to global object
7612
+ else __g.core = __e;
7613
+ }(1, 1);
admin/assets/js/sweetalert2/js/sweetalert2.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Sweetalert2=t()}(this,function(){"use strict";var e={title:"",titleText:"",text:"",html:"",type:null,customClass:"",target:"body",animation:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,showConfirmButton:!0,showCancelButton:!1,preConfirm:null,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:"#3085d6",confirmButtonClass:null,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:"#aaa",cancelButtonClass:null,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusCancel:!1,showCloseButton:!1,closeButtonAriaLabel:"Close this dialog",showLoaderOnConfirm:!1,imageUrl:null,imageWidth:null,imageHeight:null,imageAlt:"",imageClass:null,timer:null,width:500,padding:20,background:"#fff",input:null,inputPlaceholder:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputClass:null,inputAttributes:{},inputValidator:null,progressSteps:[],currentProgressStep:null,progressStepsDistance:"40px",onOpen:null,onClose:null,useRejections:!0},t=function(e){var t={};for(var n in e)t[e[n]]="swal2-"+e[n];return t},n=t(["container","shown","iosfix","modal","overlay","fade","show","hide","noanimation","close","title","content","buttonswrapper","confirm","cancel","icon","image","input","file","range","select","radio","checkbox","textarea","inputerror","validationerror","progresssteps","activeprogressstep","progresscircle","progressline","loading","styled"]),o=t(["success","warning","info","question","error"]),r=function(e,t){(e=String(e).replace(/[^0-9a-f]/gi,"")).length<6&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),t=t||0;for(var n="#",o=0;o<3;o++){var r=parseInt(e.substr(2*o,2),16);n+=("00"+(r=Math.round(Math.min(Math.max(0,r+r*t),255)).toString(16))).substr(r.length)}return n},i=function(e){var t=[];for(var n in e)-1===t.indexOf(e[n])&&t.push(e[n]);return t},a={previousWindowKeyDown:null,previousActiveElement:null,previousBodyPadding:null},l=function(e){var t=u();t&&t.parentNode.removeChild(t);{if("undefined"!=typeof document){var o=document.createElement("div");o.className=n.container,o.innerHTML=s,("string"==typeof e.target?document.querySelector(e.target):e.target).appendChild(o);var r=c(),i=E(r,n.input),a=E(r,n.file),l=r.querySelector("."+n.range+" input"),d=r.querySelector("."+n.range+" output"),p=E(r,n.select),f=r.querySelector("."+n.checkbox+" input"),m=E(r,n.textarea);return i.oninput=function(){Y.resetValidationError()},i.onkeydown=function(t){setTimeout(function(){13===t.keyCode&&e.allowEnterKey&&(t.stopPropagation(),Y.clickConfirm())},0)},a.onchange=function(){Y.resetValidationError()},l.oninput=function(){Y.resetValidationError(),d.value=l.value},l.onchange=function(){Y.resetValidationError(),l.previousSibling.value=l.value},p.onchange=function(){Y.resetValidationError()},f.onchange=function(){Y.resetValidationError()},m.oninput=function(){Y.resetValidationError()},r}console.error("SweetAlert2 requires document to initialize")}},s=('\n <div role="dialog" aria-labelledby="'+n.title+'" aria-describedby="'+n.content+'" class="'+n.modal+'" tabindex="-1">\n <ul class="'+n.progresssteps+'"></ul>\n <div class="'+n.icon+" "+o.error+'">\n <span class="swal2-x-mark"><span class="swal2-x-mark-line-left"></span><span class="swal2-x-mark-line-right"></span></span>\n </div>\n <div class="'+n.icon+" "+o.question+'">?</div>\n <div class="'+n.icon+" "+o.warning+'">!</div>\n <div class="'+n.icon+" "+o.info+'">i</div>\n <div class="'+n.icon+" "+o.success+'">\n <div class="swal2-success-circular-line-left"></div>\n <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span>\n <div class="swal2-success-ring"></div> <div class="swal2-success-fix"></div>\n <div class="swal2-success-circular-line-right"></div>\n </div>\n <img class="'+n.image+'" />\n <h2 class="'+n.title+'" id="'+n.title+'"></h2>\n <div id="'+n.content+'" class="'+n.content+'"></div>\n <input class="'+n.input+'" />\n <input type="file" class="'+n.file+'" />\n <div class="'+n.range+'">\n <output></output>\n <input type="range" />\n </div>\n <select class="'+n.select+'"></select>\n <div class="'+n.radio+'"></div>\n <label for="'+n.checkbox+'" class="'+n.checkbox+'">\n <input type="checkbox" />\n </label>\n <textarea class="'+n.textarea+'"></textarea>\n <div class="'+n.validationerror+'" id="'+n.validationerror+'"></div>\n <div class="'+n.buttonswrapper+'">\n <button type="button" class="'+n.confirm+'">OK</button>\n <button type="button" class="'+n.cancel+'">Cancel</button>\n </div>\n <button type="button" class="'+n.close+'">×</button>\n </div>\n').replace(/(^|\n)\s*/g,""),u=function(){return document.body.querySelector("."+n.container)},c=function(){return u()?u().querySelector("."+n.modal):null},d=function(){return c().querySelectorAll("."+n.icon)},p=function(e){return u()?u().querySelector("."+e):null},f=function(){return p(n.title)},m=function(){return p(n.content)},v=function(){return p(n.image)},h=function(){return p(n.buttonswrapper)},b=function(){return p(n.progresssteps)},y=function(){return p(n.validationerror)},g=function(){return p(n.confirm)},w=function(){return p(n.cancel)},C=function(){return p(n.close)},x=function(){var e=Array.from(c().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort(function(e,t){return e=parseInt(e.getAttribute("tabindex")),t=parseInt(t.getAttribute("tabindex")),e>t?1:e<t?-1:0}),t=Array.prototype.slice.call(c().querySelectorAll('button, input:not([type=hidden]), textarea, select, a, [tabindex="0"]'));return i(e.concat(t))},k=function(e,t){return!!e.classList&&e.classList.contains(t)},S=function(e){if(e.focus(),"file"!==e.type){var t=e.value;e.value="",e.value=t}},A=function(e,t){e&&t&&t.split(/\s+/).filter(Boolean).forEach(function(t){e.classList.add(t)})},B=function(e,t){e&&t&&t.split(/\s+/).filter(Boolean).forEach(function(t){e.classList.remove(t)})},E=function(e,t){for(var n=0;n<e.childNodes.length;n++)if(k(e.childNodes[n],t))return e.childNodes[n]},P=function(e,t){t||(t="block"),e.style.opacity="",e.style.display=t},L=function(e){e.style.opacity="",e.style.display="none"},T=function(e){for(;e.firstChild;)e.removeChild(e.firstChild)},q=function(e){return e.offsetWidth||e.offsetHeight||e.getClientRects().length},V=function(e,t){e.style.removeProperty?e.style.removeProperty(t):e.style.removeAttribute(t)},M=function(){var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",msAnimation:"MSAnimationEnd",animation:"animationend"};for(var n in t)if(t.hasOwnProperty(n)&&void 0!==e.style[n])return t[n];return!1}(),O=function(){if(window.onkeydown=a.previousWindowKeyDown,a.previousActiveElement&&a.previousActiveElement.focus){var e=window.scrollX,t=window.scrollY;a.previousActiveElement.focus(),e&&t&&window.scrollTo(e,t)}},H=function(){if("ontouchstart"in window||navigator.msMaxTouchPoints)return 0;var e=document.createElement("div");e.style.width="50px",e.style.height="50px",e.style.overflow="scroll",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t},N=function(e,t){var n=void 0;return function(){clearTimeout(n),n=setTimeout(function(){n=null,e()},t)}},j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},I=(function(){function e(e){this.value=e}function t(t){function n(r,i){try{var a=t[r](i),l=a.value;l instanceof e?Promise.resolve(l.value).then(function(e){n("next",e)},function(e){n("throw",e)}):o(a.done?"return":"normal",a.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":r.resolve({value:t,done:!0});break;case"throw":r.reject(t);break;default:r.resolve({value:t,done:!1})}(r=r.next)?n(r.key,r.arg):i=null}var r,i;this._invoke=function(e,t){return new Promise(function(o,a){var l={key:e,arg:t,resolve:o,reject:a,next:null};i?i=i.next=l:(r=i=l,n(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}),R=I({},e),K=[],W=void 0,D=function(e){("string"==typeof e.target&&!document.querySelector(e.target)||"string"!=typeof e.target&&!e.target.appendChild)&&(console.warn('SweetAlert2: Target parameter is not valid, defaulting to "body"'),e.target="body");var t=void 0,r=c(),i="string"==typeof e.target?document.querySelector(e.target):e.target;t=r&&i&&r.parentNode!==i.parentNode?l(e):r||l(e);for(var a in e)Y.isValidParameter(a)||console.warn('SweetAlert2: Unknown parameter "'+a+'"');t.style.width="number"==typeof e.width?e.width+"px":e.width,t.style.padding=e.padding+"px",t.style.background=e.background;for(var s=t.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix"),u=0;u<s.length;u++)s[u].style.background=e.background;var p=f(),y=m(),x=h(),k=g(),S=w(),E=C();if(e.titleText?p.innerText=e.titleText:p.innerHTML=e.title.split("\n").join("<br />"),e.text||e.html){if("object"===j(e.html))if(y.innerHTML="",0 in e.html)for(var q=0;q in e.html;q++)y.appendChild(e.html[q].cloneNode(!0));else y.appendChild(e.html.cloneNode(!0));else e.html?y.innerHTML=e.html:e.text&&(y.textContent=e.text);P(y)}else L(y);e.showCloseButton?(E.setAttribute("aria-label",e.closeButtonAriaLabel),P(E)):L(E),t.className=n.modal,e.customClass&&A(t,e.customClass);var M=b(),O=parseInt(null===e.currentProgressStep?Y.getQueueStep():e.currentProgressStep,10);e.progressSteps.length?(P(M),T(M),O>=e.progressSteps.length&&console.warn("SweetAlert2: Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),e.progressSteps.forEach(function(t,o){var r=document.createElement("li");if(A(r,n.progresscircle),r.innerHTML=t,o===O&&A(r,n.activeprogressstep),M.appendChild(r),o!==e.progressSteps.length-1){var i=document.createElement("li");A(i,n.progressline),i.style.width=e.progressStepsDistance,M.appendChild(i)}})):L(M);for(var H=d(),N=0;N<H.length;N++)L(H[N]);if(e.type){var I=!1;for(var R in o)if(e.type===R){I=!0;break}if(!I)return console.error("SweetAlert2: Unknown alert type: "+e.type),!1;var K=t.querySelector("."+n.icon+"."+o[e.type]);if(P(K),e.animation)switch(e.type){case"success":A(K,"swal2-animate-success-icon"),A(K.querySelector(".swal2-success-line-tip"),"swal2-animate-success-line-tip"),A(K.querySelector(".swal2-success-line-long"),"swal2-animate-success-line-long");break;case"error":A(K,"swal2-animate-error-icon"),A(K.querySelector(".swal2-x-mark"),"swal2-animate-x-mark")}}var W=v();e.imageUrl?(W.setAttribute("src",e.imageUrl),W.setAttribute("alt",e.imageAlt),P(W),e.imageWidth?W.setAttribute("width",e.imageWidth):W.removeAttribute("width"),e.imageHeight?W.setAttribute("height",e.imageHeight):W.removeAttribute("height"),W.className=n.image,e.imageClass&&A(W,e.imageClass)):L(W),e.showCancelButton?S.style.display="inline-block":L(S),e.showConfirmButton?V(k,"display"):L(k),e.showConfirmButton||e.showCancelButton?P(x):L(x),k.innerHTML=e.confirmButtonText,S.innerHTML=e.cancelButtonText,k.setAttribute("aria-label",e.confirmButtonAriaLabel),S.setAttribute("aria-label",e.cancelButtonAriaLabel),e.buttonsStyling&&(k.style.backgroundColor=e.confirmButtonColor,S.style.backgroundColor=e.cancelButtonColor),k.className=n.confirm,A(k,e.confirmButtonClass),S.className=n.cancel,A(S,e.cancelButtonClass),e.buttonsStyling?(A(k,n.styled),A(S,n.styled)):(B(k,n.styled),B(S,n.styled),k.style.backgroundColor=k.style.borderLeftColor=k.style.borderRightColor="",S.style.backgroundColor=S.style.borderLeftColor=S.style.borderRightColor=""),!0===e.animation?B(t,n.noanimation):A(t,n.noanimation),e.showLoaderOnConfirm&&!e.preConfirm&&console.warn("SweetAlert2: showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://limonte.github.io/sweetalert2/#ajax-request")},U=function(e,t){var o=u(),r=c();e?(A(r,n.show),A(o,n.fade),B(r,n.hide)):B(r,n.fade),P(r),o.style.overflowY="hidden",M&&!k(r,n.noanimation)?r.addEventListener(M,function e(){r.removeEventListener(M,e),o.style.overflowY="auto"}):o.style.overflowY="auto",A(document.documentElement,n.shown),A(document.body,n.shown),A(o,n.shown),z(),Z(),a.previousActiveElement=document.activeElement,null!==t&&"function"==typeof t&&setTimeout(function(){t(r)})},z=function(){null===a.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(a.previousBodyPadding=document.body.style.paddingRight,document.body.style.paddingRight=H()+"px")},_=function(){null!==a.previousBodyPadding&&(document.body.style.paddingRight=a.previousBodyPadding,a.previousBodyPadding=null)},Z=function(){if(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream&&!k(document.body,n.iosfix)){var e=document.body.scrollTop;document.body.style.top=-1*e+"px",A(document.body,n.iosfix)}},Q=function(){if(k(document.body,n.iosfix)){var e=parseInt(document.body.style.top,10);B(document.body,n.iosfix),document.body.style.top="",document.body.scrollTop=-1*e}},Y=function e(){for(var t=arguments.length,o=Array(t),i=0;i<t;i++)o[i]=arguments[i];if(void 0===o[0])return console.error("SweetAlert2 expects at least 1 attribute!"),!1;var l=I({},R);switch(j(o[0])){case"string":l.title=o[0],l.html=o[1],l.type=o[2];break;case"object":I(l,o[0]),l.extraParams=o[0].extraParams,"email"===l.input&&null===l.inputValidator&&(l.inputValidator=function(e){return new Promise(function(t,n){/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/.test(e)?t():n("Invalid email address")})}),"url"===l.input&&null===l.inputValidator&&(l.inputValidator=function(e){return new Promise(function(t,n){/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)$/.test(e)?t():n("Invalid URL")})});break;default:return console.error('SweetAlert2: Unexpected type of argument! Expected "string" or "object", got '+j(o[0])),!1}D(l);var s=u(),d=c();return new Promise(function(t,o){l.timer&&(d.timeout=setTimeout(function(){e.closeModal(l.onClose),l.useRejections?o("timer"):t({dismiss:"timer"})},l.timer));var i=function(e){if(!(e=e||l.input))return null;switch(e){case"select":case"textarea":case"file":return E(d,n[e]);case"checkbox":return d.querySelector("."+n.checkbox+" input");case"radio":return d.querySelector("."+n.radio+" input:checked")||d.querySelector("."+n.radio+" input:first-child");case"range":return d.querySelector("."+n.range+" input");default:return E(d,n.input)}},p=function(){var e=i();if(!e)return null;switch(l.input){case"checkbox":return e.checked?1:0;case"radio":return e.checked?e.value:null;case"file":return e.files.length?e.files[0]:null;default:return l.inputAutoTrim?e.value.trim():e.value}};l.input&&setTimeout(function(){var e=i();e&&S(e)},0);for(var k=function(n){l.showLoaderOnConfirm&&e.showLoading(),l.preConfirm?l.preConfirm(n,l.extraParams).then(function(o){e.closeModal(l.onClose),t(o||n)},function(t){e.hideLoading(),t&&e.showValidationError(t)}):(e.closeModal(l.onClose),t(l.useRejections?n:{value:n}))},T=function(n){var i=n||window.event,a=i.target||i.srcElement,s=g(),u=w(),c=s&&(s===a||s.contains(a)),d=u&&(u===a||u.contains(a));switch(i.type){case"mouseover":case"mouseup":l.buttonsStyling&&(c?s.style.backgroundColor=r(l.confirmButtonColor,-.1):d&&(u.style.backgroundColor=r(l.cancelButtonColor,-.1)));break;case"mouseout":l.buttonsStyling&&(c?s.style.backgroundColor=l.confirmButtonColor:d&&(u.style.backgroundColor=l.cancelButtonColor));break;case"mousedown":l.buttonsStyling&&(c?s.style.backgroundColor=r(l.confirmButtonColor,-.2):d&&(u.style.backgroundColor=r(l.cancelButtonColor,-.2)));break;case"click":if(c&&e.isVisible())if(e.disableButtons(),l.input){var f=p();l.inputValidator?(e.disableInput(),l.inputValidator(f,l.extraParams).then(function(){e.enableButtons(),e.enableInput(),k(f)},function(t){e.enableButtons(),e.enableInput(),t&&e.showValidationError(t)})):k(f)}else k(!0);else d&&e.isVisible()&&(e.disableButtons(),e.closeModal(l.onClose),l.useRejections?o("cancel"):t({dismiss:"cancel"}))}},V=d.querySelectorAll("button"),M=0;M<V.length;M++)V[M].onclick=T,V[M].onmouseover=T,V[M].onmouseout=T,V[M].onmousedown=T;C().onclick=function(){e.closeModal(l.onClose),l.useRejections?o("close"):t({dismiss:"close"})},s.onclick=function(n){n.target===s&&l.allowOutsideClick&&(e.closeModal(l.onClose),l.useRejections?o("overlay"):t({dismiss:"overlay"}))};var O=h(),H=g(),I=w();l.reverseButtons?H.parentNode.insertBefore(I,H):H.parentNode.insertBefore(H,I);var R=function(e,t){for(var n=x(l.focusCancel),o=0;o<n.length;o++){(e+=t)===n.length?e=0:-1===e&&(e=n.length-1);var r=n[e];if(q(r))return r.focus()}},K=function(n){var r=n||window.event,i=r.keyCode||r.which;if(-1!==[9,13,32,27,37,38,39,40].indexOf(i)){for(var a=r.target||r.srcElement,s=x(l.focusCancel),u=-1,c=0;c<s.length;c++)if(a===s[c]){u=c;break}9===i?(r.shiftKey?R(u,-1):R(u,1),r.stopPropagation(),r.preventDefault()):37===i||38===i||39===i||40===i?document.activeElement===H&&q(I)?I.focus():document.activeElement===I&&q(H)&&H.focus():27===i&&!0===l.allowEscapeKey&&(e.closeModal(l.onClose),l.useRejections?o("esc"):t({dismiss:"esc"}))}};window.onkeydown&&window.onkeydown.toString()===K.toString()||(a.previousWindowKeyDown=window.onkeydown,window.onkeydown=K),l.buttonsStyling&&(H.style.borderLeftColor=l.confirmButtonColor,H.style.borderRightColor=l.confirmButtonColor),e.hideLoading=e.disableLoading=function(){l.showConfirmButton||(L(H),l.showCancelButton||L(h())),B(O,n.loading),B(d,n.loading),d.removeAttribute("aria-busy"),H.disabled=!1,I.disabled=!1},e.getTitle=function(){return f()},e.getContent=function(){return m()},e.getInput=function(){return i()},e.getImage=function(){return v()},e.getButtonsWrapper=function(){return h()},e.getConfirmButton=function(){return g()},e.getCancelButton=function(){return w()},e.enableButtons=function(){H.disabled=!1,I.disabled=!1},e.disableButtons=function(){H.disabled=!0,I.disabled=!0},e.enableConfirmButton=function(){H.disabled=!1},e.disableConfirmButton=function(){H.disabled=!0},e.enableInput=function(){var e=i();if(!e)return!1;if("radio"===e.type)for(var t=e.parentNode.parentNode.querySelectorAll("input"),n=0;n<t.length;n++)t[n].disabled=!1;else e.disabled=!1},e.disableInput=function(){var e=i();if(!e)return!1;if(e&&"radio"===e.type)for(var t=e.parentNode.parentNode.querySelectorAll("input"),n=0;n<t.length;n++)t[n].disabled=!0;else e.disabled=!0},e.recalculateHeight=N(function(){var e=c();if(e){var t=e.style.display;e.style.minHeight="",P(e),e.style.minHeight=e.scrollHeight+1+"px",e.style.display=t}},50),e.showValidationError=function(e){var t=y();t.innerHTML=e,P(t);var o=i();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedBy",n.validationerror),S(o),A(o,n.inputerror))},e.resetValidationError=function(){var t=y();L(t),e.recalculateHeight();var o=i();o&&(o.removeAttribute("aria-invalid"),o.removeAttribute("aria-describedBy"),B(o,n.inputerror))},e.getProgressSteps=function(){return l.progressSteps},e.setProgressSteps=function(e){l.progressSteps=e,D(l)},e.showProgressSteps=function(){P(b())},e.hideProgressSteps=function(){L(b())},e.enableButtons(),e.hideLoading(),e.resetValidationError();for(var z=["input","file","range","select","radio","checkbox","textarea"],_=void 0,Z=0;Z<z.length;Z++){var Q=n[z[Z]],Y=E(d,Q);if(_=i(z[Z])){for(var $ in _.attributes)if(_.attributes.hasOwnProperty($)){var J=_.attributes[$].name;"type"!==J&&"value"!==J&&_.removeAttribute(J)}for(var X in l.inputAttributes)_.setAttribute(X,l.inputAttributes[X])}Y.className=Q,l.inputClass&&A(Y,l.inputClass),L(Y)}var F=void 0;switch(l.input){case"text":case"email":case"password":case"number":case"tel":case"url":(_=E(d,n.input)).value=l.inputValue,_.placeholder=l.inputPlaceholder,_.type=l.input,P(_);break;case"file":(_=E(d,n.file)).placeholder=l.inputPlaceholder,_.type=l.input,P(_);break;case"range":var G=E(d,n.range),ee=G.querySelector("input"),te=G.querySelector("output");ee.value=l.inputValue,ee.type=l.input,te.value=l.inputValue,P(G);break;case"select":var ne=E(d,n.select);if(ne.innerHTML="",l.inputPlaceholder){var oe=document.createElement("option");oe.innerHTML=l.inputPlaceholder,oe.value="",oe.disabled=!0,oe.selected=!0,ne.appendChild(oe)}F=function(e){for(var t in e){var n=document.createElement("option");n.value=t,n.innerHTML=e[t],l.inputValue===t&&(n.selected=!0),ne.appendChild(n)}P(ne),ne.focus()};break;case"radio":var re=E(d,n.radio);re.innerHTML="",F=function(e){for(var t in e){var o=document.createElement("input"),r=document.createElement("label"),i=document.createElement("span");o.type="radio",o.name=n.radio,o.value=t,l.inputValue===t&&(o.checked=!0),i.innerHTML=e[t],r.appendChild(o),r.appendChild(i),r.for=o.id,re.appendChild(r)}P(re);var a=re.querySelectorAll("input");a.length&&a[0].focus()};break;case"checkbox":var ie=E(d,n.checkbox),ae=i("checkbox");ae.type="checkbox",ae.value=1,ae.id=n.checkbox,ae.checked=Boolean(l.inputValue);var le=ie.getElementsByTagName("span");le.length&&ie.removeChild(le[0]),(le=document.createElement("span")).innerHTML=l.inputPlaceholder,ie.appendChild(le),P(ie);break;case"textarea":var se=E(d,n.textarea);se.value=l.inputValue,se.placeholder=l.inputPlaceholder,P(se);break;case null:break;default:console.error('SweetAlert2: Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'+l.input+'"')}"select"!==l.input&&"radio"!==l.input||(l.inputOptions instanceof Promise?(e.showLoading(),l.inputOptions.then(function(t){e.hideLoading(),F(t)})):"object"===j(l.inputOptions)?F(l.inputOptions):console.error("SweetAlert2: Unexpected type of inputOptions! Expected object or Promise, got "+j(l.inputOptions))),U(l.animation,l.onOpen),l.allowEnterKey?l.focusCancel&&q(I)?I.focus():l.focusConfirm&&q(H)?H.focus():R(-1,1):document.activeElement&&document.activeElement.blur(),u().scrollTop=0,"undefined"==typeof MutationObserver||W||(W=new MutationObserver(e.recalculateHeight)).observe(d,{childList:!0,characterData:!0,subtree:!0})})};return Y.isVisible=function(){return!!c()},Y.queue=function(e){K=e;var t=function(){K=[],document.body.removeAttribute("data-swal2-queue-step")},n=[];return new Promise(function(e,o){!function r(i,a){i<K.length?(document.body.setAttribute("data-swal2-queue-step",i),Y(K[i]).then(function(e){n.push(e),r(i+1,a)},function(e){t(),o(e)})):(t(),e(n))}(0)})},Y.getQueueStep=function(){return document.body.getAttribute("data-swal2-queue-step")},Y.insertQueueStep=function(e,t){return t&&t<K.length?K.splice(t,0,e):K.push(e)},Y.deleteQueueStep=function(e){void 0!==K[e]&&K.splice(e,1)},Y.close=Y.closeModal=function(e){var t=u(),o=c();if(o){B(o,n.show),A(o,n.hide),clearTimeout(o.timeout),O();var r=function(){t.parentNode&&t.parentNode.removeChild(t),B(document.documentElement,n.shown),B(document.body,n.shown),_(),Q()};M&&!k(o,n.noanimation)?o.addEventListener(M,function e(){o.removeEventListener(M,e),k(o,n.hide)&&r()}):r(),null!==e&&"function"==typeof e&&setTimeout(function(){e(o)})}},Y.clickConfirm=function(){return g().click()},Y.clickCancel=function(){return w().click()},Y.showLoading=Y.enableLoading=function(){var e=c();e||Y(""),e=c();var t=h(),o=g(),r=w();P(t),P(o,"inline-block"),A(t,n.loading),A(e,n.loading),o.disabled=!0,r.disabled=!0,e.setAttribute("aria-busy",!0),e.focus()},Y.isValidParameter=function(t){return e.hasOwnProperty(t)||"extraParams"===t},Y.setDefaults=function(e){if(!e||"object"!==(void 0===e?"undefined":j(e)))return console.error("SweetAlert2: the argument for setDefaults() is required and has to be a object");for(var t in e)Y.isValidParameter(t)||(console.warn('SweetAlert2: Unknown parameter "'+t+'"'),delete e[t]);I(R,e)},Y.resetDefaults=function(){R=I({},e)},Y.noop=function(){},Y.version="6.9.0",Y.default=Y,Y}),window.Sweetalert2&&(window.sweetAlert=window.swal=window.Sweetalert2);
admin/assets/pa-elements-font/css/pa-elements.css ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @font-face {
2
+ font-family: 'pa-elements';
3
+ src: url('../fonts/pa-elements.eot?sivga8');
4
+ src: url('../fonts/pa-elements.eot?sivga8#iefix') format('embedded-opentype'),
5
+ url('../fonts/pa-elements.ttf?sivga8') format('truetype'),
6
+ url('../fonts/pa-elements.woff?sivga8') format('woff'),
7
+ url('../fonts/pa-elements.svg?sivga8#pa-elements') format('svg');
8
+ font-weight: normal;
9
+ font-style: normal;
10
+ color: #1A7FC2;
11
+ }
12
+ [class^="pa-"], [class*=" pa-"] {
13
+ /* use !important to prevent issues with browser extensions that change fonts */
14
+ font-family: 'pa-elements' !important;
15
+ speak: none;
16
+ font-style: normal;
17
+ font-weight: normal;
18
+ font-variant: normal;
19
+ text-transform: none;
20
+ line-height: 1;
21
+
22
+ /* Better Font Rendering =========== */
23
+ -webkit-font-smoothing: antialiased;
24
+ -moz-osx-font-smoothing: grayscale;
25
+ color: #1A7FC2;
26
+ }
27
+ .pa-pa-video:before {
28
+ content: "\e901";
29
+ }
30
+ .pa-pa-text:before {
31
+ content: "\e902";
32
+ }
33
+ .pa-pa-chat:before {
34
+ content: "\e903";
35
+ }
36
+ .pa-pa-list:before {
37
+ content: "\e904";
38
+ }
39
+ .pa-pa-dollar:before {
40
+ content: "\e905";
41
+ }
42
+ .pa-pa-person:before {
43
+ content: "\e900";
44
+ }
45
+ .pa-pa-page:before {
46
+ content: "\e906";
47
+ }
48
+ .pa-pa-indicator:before {
49
+ content: "\e907";
50
+ }
51
+ .pa-pa-image:before {
52
+ content: "\e908";
53
+ }
54
+ .pa-pa-spin:before {
55
+ content: "\e909";
56
+ }
57
+ .pa-pa-typing:before {
58
+ content: "\e90a";
59
+ }
60
+ .pa-pa-header:before {
61
+ content: "\e90b";
62
+ }
63
+ .pa-pa-counter:before {
64
+ content: "\e90c";
65
+ }
66
+ .pa-pa-count:before {
67
+ content: "\e90d";
68
+ }
69
+ .pa-pa-points:before {
70
+ content: "\e90e";
71
+ }
72
+ .pa-pa-post:before {
73
+ content: "\e90f";
74
+ }
75
+ .pa-pa-image2:before {
76
+ content: "\e910";
77
+ }
admin/assets/pa-elements-font/fonts/pa-elements.eot ADDED
Binary file
admin/assets/pa-elements-font/fonts/pa-elements.svg ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Generated by IcoMoon</metadata>
5
+ <defs>
6
+ <font id="icomoon" horiz-adv-x="1024">
7
+ <font-face units-per-em="1024" ascent="960" descent="-64" />
8
+ <missing-glyph horiz-adv-x="1024" />
9
+ <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
+ <glyph unicode="&#xe900;" glyph-name="pa-pa-person" d="M874.095 810.074c-199.648 199.651-524.504 199.651-724.152 0-70.048-70.048-117.964-158.050-138.571-254.496-20.062-93.91-13.491-191.207 19.003-281.366 3.904-10.827 15.849-16.44 26.672-12.539 10.83 3.904 16.443 15.846 12.539 26.672-29.854 82.837-35.891 172.232-17.454 258.529 18.92 88.558 62.935 169.384 127.283 233.732 183.399 183.399 481.809 183.399 665.208 0 87.339-87.342 136.23-203.441 137.665-326.916 1.435-123.25-44.498-240.276-129.329-329.515-1.004-1.056-1.997-2.119-2.991-3.182-1.758-1.879-3.512-3.762-5.346-5.596-183.399-183.399-481.809-183.399-665.208 0-0.976 0.976-1.928 1.969-2.869 2.963-0.049 1.924-0.090 3.821-0.090 5.689 0 4.196 0.080 8.374 0.233 12.539 0.052 1.393 0.156 2.772 0.226 4.161 0.135 2.768 0.264 5.537 0.465 8.291 0.122 1.643 0.299 3.268 0.445 4.904 0.219 2.483 0.424 4.967 0.695 7.437 0.191 1.744 0.441 3.473 0.66 5.21 0.295 2.345 0.577 4.696 0.924 7.030 0.264 1.778 0.577 3.539 0.868 5.307 0.372 2.275 0.733 4.55 1.153 6.811 0.33 1.789 0.709 3.56 1.070 5.339 0.448 2.22 0.889 4.442 1.382 6.648 0.399 1.789 0.844 3.567 1.271 5.346 0.521 2.171 1.039 4.342 1.601 6.495 0.469 1.785 0.976 3.557 1.469 5.332 0.594 2.126 1.184 4.255 1.82 6.367 0.531 1.771 1.101 3.529 1.664 5.287 0.667 2.088 1.334 4.179 2.039 6.249 0.597 1.747 1.223 3.484 1.848 5.221 0.74 2.056 1.483 4.113 2.261 6.155 0.66 1.726 1.344 3.435 2.032 5.148 0.809 2.018 1.626 4.036 2.473 6.037 0.722 1.702 1.466 3.39 2.216 5.078 0.879 1.983 1.768 3.96 2.685 5.922 0.782 1.671 1.58 3.331 2.39 4.988 0.952 1.949 1.914 3.894 2.9 5.821 0.837 1.632 1.688 3.258 2.553 4.877 1.021 1.917 2.060 3.828 3.119 5.728 0.893 1.598 1.796 3.189 2.713 4.769 1.091 1.879 2.199 3.748 3.328 5.61 0.948 1.563 1.907 3.119 2.879 4.668 1.16 1.841 2.338 3.671 3.532 5.488 1 1.525 2.008 3.043 3.032 4.55 1.226 1.806 2.48 3.591 3.744 5.373 1.052 1.483 2.105 2.963 3.182 4.425 1.296 1.764 2.619 3.512 3.949 5.248 1.101 1.438 2.199 2.876 3.324 4.297 1.365 1.726 2.761 3.432 4.161 5.13 1.143 1.389 2.285 2.779 3.453 4.151 1.438 1.688 2.907 3.352 4.38 5.012 1.188 1.341 2.369 2.685 3.578 4.005 1.507 1.646 3.046 3.262 4.588 4.877 1.23 1.292 2.452 2.588 3.703 3.862 1.58 1.605 3.196 3.175 4.807 4.752 1.264 1.233 2.518 2.48 3.803 3.696 1.66 1.57 3.359 3.102 5.050 4.637 1.292 1.171 2.567 2.355 3.876 3.508 1.747 1.539 3.539 3.032 5.321 4.536 1.306 1.101 2.598 2.22 3.921 3.303 1.844 1.507 3.734 2.97 5.616 4.442 1.313 1.025 2.605 2.074 3.932 3.081 1.983 1.504 4.008 2.956 6.030 4.415 1.275 0.924 2.525 1.869 3.817 2.775 2.23 1.567 4.512 3.077 6.787 4.595 1.122 0.747 2.22 1.521 3.348 2.258 2.966 1.928 5.985 3.793 9.024 5.634 0.472 0.285 0.931 0.59 1.407 0.875 3.515 2.105 7.079 4.147 10.684 6.134 1.233 0.677 2.501 1.313 3.748 1.976 2.393 1.278 4.779 2.567 7.214 3.789 1.56 0.785 3.157 1.521 4.731 2.282 1.987 0.962 3.967 1.935 5.978 2.862 37.773-36.082 88.162-56.509 140.464-56.509s102.695 20.431 140.468 56.516c73.737-34.126 134.087-95.359 166.852-169.821 4.634-10.531 16.926-15.321 27.468-10.684 10.535 4.637 15.318 16.936 10.681 27.468-35.839 81.451-98.231 146.539-177.206 185.83 22.914 33.612 35.311 73.303 35.311 114.261 0 112.25-91.323 203.573-203.573 203.573-11.507 0-20.84-9.333-20.84-20.84s9.333-20.84 20.84-20.84c89.27 0 161.892-72.625 161.892-161.892 0-39.916-14.835-78.353-41.768-108.221-0.003-0.003-0.007-0.007-0.010-0.010-30.753-34.102-74.532-53.661-120.117-53.661s-89.367 19.559-120.117 53.661c-0.003 0.007-0.010 0.010-0.017 0.014-26.929 29.878-41.761 68.304-41.761 108.214 0 43.57 17.058 84.445 48.034 115.088 8.183 8.096 8.253 21.292 0.156 29.472-8.093 8.187-21.288 8.249-29.472 0.16-38.947-38.52-60.399-89.916-60.399-144.705 0-40.917 12.365-80.579 35.241-114.174-0.205-0.101-0.403-0.212-0.604-0.316-1.626-0.813-3.213-1.674-4.825-2.504-2.47-1.278-4.946-2.549-7.381-3.88-1.723-0.938-3.407-1.924-5.113-2.886-2.275-1.289-4.554-2.57-6.797-3.901-1.74-1.035-3.453-2.105-5.175-3.164-2.154-1.327-4.307-2.65-6.429-4.015-1.733-1.115-3.435-2.261-5.148-3.4-2.060-1.372-4.116-2.751-6.144-4.161-1.705-1.188-3.39-2.4-5.075-3.612-1.98-1.428-3.953-2.862-5.901-4.324-1.671-1.254-3.321-2.525-4.967-3.803-1.91-1.483-3.807-2.977-5.682-4.495-1.626-1.313-3.237-2.643-4.842-3.981-1.844-1.542-3.675-3.102-5.488-4.679-1.573-1.365-3.136-2.741-4.686-4.133-1.789-1.608-3.553-3.234-5.307-4.873-1.514-1.414-3.025-2.831-4.519-4.272-1.733-1.674-3.439-3.373-5.141-5.078-1.452-1.455-2.904-2.907-4.328-4.383-1.685-1.747-3.338-3.526-4.988-5.304-1.379-1.487-2.768-2.966-4.123-4.477-1.65-1.834-3.255-3.706-4.866-5.571-1.296-1.501-2.602-2.987-3.873-4.505-1.636-1.956-3.22-3.949-4.814-5.936-1.184-1.48-2.393-2.938-3.557-4.436-1.674-2.154-3.293-4.349-4.918-6.537-1.021-1.375-2.070-2.727-3.070-4.116-2.056-2.848-4.047-5.738-6.019-8.642-0.518-0.764-1.066-1.507-1.58-2.275-2.456-3.668-4.842-7.378-7.166-11.129-0.802-1.296-1.556-2.619-2.341-3.921-1.504-2.497-3.015-4.991-4.463-7.523-0.903-1.58-1.758-3.189-2.636-4.783-1.268-2.292-2.543-4.578-3.758-6.898-0.903-1.719-1.758-3.46-2.636-5.193-1.132-2.237-2.268-4.47-3.355-6.731-0.865-1.799-1.688-3.619-2.525-5.429-1.028-2.233-2.060-4.463-3.046-6.718-0.813-1.858-1.591-3.734-2.372-5.606-0.941-2.247-1.876-4.495-2.772-6.759-0.754-1.903-1.476-3.817-2.199-5.731-0.854-2.272-1.698-4.547-2.511-6.836-0.688-1.942-1.355-3.894-2.015-5.849-0.775-2.296-1.528-4.599-2.258-6.916-0.622-1.969-1.223-3.946-1.813-5.926-0.695-2.338-1.365-4.682-2.015-7.037-0.549-1.987-1.087-3.977-1.605-5.978-0.615-2.379-1.198-4.769-1.768-7.166-0.476-2.001-0.948-3.998-1.389-6.006-0.535-2.428-1.032-4.87-1.518-7.315-0.399-2.001-0.806-4.001-1.174-6.012-0.455-2.494-0.865-5.002-1.271-7.513-0.32-1.98-0.656-3.956-0.945-5.943-0.379-2.591-0.698-5.196-1.025-7.801-0.24-1.931-0.504-3.859-0.716-5.797-0.299-2.73-0.528-5.478-0.768-8.225-0.16-1.83-0.351-3.654-0.483-5.495-0.222-3.067-0.368-6.148-0.518-9.232-0.073-1.532-0.188-3.053-0.243-4.588-0.167-4.627-0.261-9.271-0.261-13.932 0-5.033 0.17-9.792 0.375-15.047 0.049-1.216 0.219-2.397 0.462-3.55 0.021-0.090 0.031-0.181 0.052-0.271 0.257-1.136 0.618-2.226 1.052-3.282 0.042-0.104 0.080-0.208 0.125-0.313 0.448-1.042 0.983-2.035 1.587-2.98 0.076-0.118 0.149-0.236 0.226-0.351 0.622-0.927 1.313-1.799 2.067-2.612 0.056-0.059 0.094-0.132 0.149-0.191l2.751-2.928c2.077-2.223 4.154-4.439 6.322-6.603 99.826-99.826 230.95-149.738 362.078-149.738s262.252 49.913 362.078 149.738c2.167 2.164 4.244 4.383 6.322 6.603l2.751 2.928c92.354 97.154 142.357 224.545 140.798 358.715-1.553 134.438-54.779 260.835-149.86 355.916z" />
11
+ <glyph unicode="&#xe901;" glyph-name="pa-pa-video" d="M409.954 478.217c2.793-1.527 5.883-2.29 8.955-2.29 3.482 0 6.945 0.987 9.998 2.904l204.8 130.327c5.362 3.426 8.62 9.346 8.62 15.714s-3.258 12.288-8.62 15.714l-204.8 130.327c-5.772 3.631-12.977 3.873-18.972 0.614-5.939-3.277-9.644-9.533-9.644-16.328v-260.655c0-6.796 3.705-13.051 9.663-16.328zM437.527 721.296l151.515-96.424-151.515-96.424v192.847zM9.309 960v-1024h1005.382v1024h-1005.382zM977.455 922.764v-614.4h-930.909v614.4h930.909zM46.545-26.764v297.891h930.909v-297.891h-930.909zM884.364 140.8h-446.836v37.236c0 10.296-8.322 18.618-18.618 18.618s-18.618-8.322-18.618-18.618v-37.236h-74.473c-10.296 0-18.618-8.322-18.618-18.618s8.322-18.618 18.618-18.618h74.473v-37.236c0-10.296 8.322-18.618 18.618-18.618s18.618 8.322 18.618 18.618v37.236h446.836c10.296 0 18.618 8.322 18.618 18.618s-8.322 18.618-18.618 18.618zM139.636 196.655c-10.296 0-18.618-8.322-18.618-18.618v-111.709c0-10.296 8.322-18.618 18.618-18.618s18.618 8.322 18.618 18.618v111.709c0 10.296-8.322 18.618-18.618 18.618zM214.109 196.655c-10.296 0-18.618-8.322-18.618-18.618v-111.709c0-10.296 8.322-18.618 18.618-18.618s18.618 8.322 18.618 18.618v111.709c0 10.296-8.322 18.618-18.618 18.618z" />
12
+ <glyph unicode="&#xe902;" glyph-name="pa-pa-text" d="M864.893 960h-705.786c-14.195 0-25.696-11.505-25.696-25.696v-117.63c0-14.191 11.502-25.696 25.696-25.696s25.696 11.505 25.696 25.696v91.934h301.501v-921.216h-63.243c-14.195 0-25.696-11.505-25.696-25.696s11.502-25.696 25.696-25.696h177.879c14.195 0 25.696 11.505 25.696 25.696s-11.502 25.696-25.696 25.696h-63.243v921.216h301.501v-91.934c0-14.191 11.502-25.696 25.696-25.696s25.696 11.505 25.696 25.696v117.63c0 14.191-11.502 25.696-25.696 25.696z" />
13
+ <glyph unicode="&#xe903;" glyph-name="pa-pa-chat" d="M225.963-54.877c-2.513 0-5.058 0.621-7.354 1.862-5.027 2.7-8.161 7.975-8.161 13.653v221.060c-135.82 70.625-210.448 194.281-210.448 349.215 0 239.43 220.098 419.964 512 419.964s512-180.534 512-419.964c0-239.399-220.098-419.933-512-419.933-9.588 0-18.991 0.528-28.424 1.024l-0.621 0.031-248.46-164.336c-2.576-1.707-5.554-2.576-8.533-2.576zM512 919.847c-274.184 0-480.97-167.222-480.97-388.934 0-103.114 35.002-243.34 201.79-325.787 5.275-2.607 8.626-8.006 8.626-13.902v-201.728l228.662 151.242c2.793 1.862 6.175 2.948 9.371 2.544l5.772-0.31c8.875-0.496 17.718-0.962 26.717-0.962 274.184 0 480.97 167.191 480.97 388.903s-206.755 388.934-480.939 388.934z" />
14
+ <glyph unicode="&#xe904;" glyph-name="pa-pa-list" d="M581.983-60.112h-559.638c-12.334 0-22.344 10.010-22.344 22.344s10.010 22.344 22.344 22.344h559.638c12.334 0 22.344-10.010 22.344-22.344s-9.966-22.344-22.344-22.344zM1001.656 263.703h-979.311c-12.334 0-22.344 10.010-22.344 22.344s10.010 22.344 22.344 22.344h979.311c12.334 0 22.344-10.010 22.344-22.344s-10.010-22.344-22.344-22.344zM581.983 587.563h-559.638c-12.334 0-22.344 10.010-22.344 22.344s10.010 22.344 22.344 22.344h559.638c12.334 0 22.344-10.010 22.344-22.344s-9.966-22.344-22.344-22.344zM1001.656 911.423h-979.311c-12.334 0-22.344 10.010-22.344 22.344s10.010 22.344 22.344 22.344h979.311c12.334 0 22.344-10.010 22.344-22.344s-10.010-22.344-22.344-22.344z" />
15
+ <glyph unicode="&#xe905;" glyph-name="pa-pa-dollar" d="M840.446 459.647c-41.020 60.821-93.463 107.539-135.599 145.078-37.767 33.646-71.064 63.325-79.438 88.963 17.571 6.862 30.060 23.96 30.060 43.934 0 19.472-11.863 36.222-28.742 43.408l34.846 136.671c3.728 13.193 1.346 25.379-6.551 33.469-7.948 8.139-20.174 10.793-33.542 7.282-0.255-0.066-0.506-0.138-0.756-0.219-0.654-0.209-65.608-20.944-87.191-27.143-14.024-4.023-38.644-4.045-52.688-0.046-21.809 6.214-87.452 27.034-88.112 27.245-0.249 0.078-0.5 0.15-0.752 0.217-13.374 3.489-25.598 0.821-33.542-7.326s-10.304-20.439-6.477-33.722c0.044-0.161 0.094-0.319 0.144-0.476l44.229-136.376c-16.376-7.4-27.805-23.878-27.805-42.984 0-19.973 12.489-37.073 30.060-43.934-8.375-25.636-41.672-55.315-79.438-88.961-42.138-37.539-94.579-84.257-135.599-145.078-48.356-71.696-71.863-148.796-71.863-235.706 0-78.378 31.493-150.289 88.676-202.49 61.24-55.903 146.798-85.451 247.422-85.451h128.42c100.625 0 186.182 29.549 247.422 85.451 57.185 52.201 88.678 124.114 88.678 202.49 0 86.906-23.507 164.008-71.863 235.704zM543.829 720.564c-0.012 0-0.024 0-0.036 0h-63.58c-0.022 0-0.044 0-0.064 0h-64.463c-9.405 0-17.056 7.651-17.056 17.056 0 9.395 7.633 17.036 17.024 17.054 0.010 0 0.020-0.002 0.028-0.002 0.016 0 0.034 0.004 0.050 0.004h80.158c0.016 0 0.030-0.004 0.046-0.004 0.020 0 0.042 0.004 0.064 0.004h32.001c0.022 0 0.042-0.004 0.064-0.004 0.016 0 0.030 0.004 0.046 0.004h80.204c9.405 0 17.056-7.651 17.056-17.056s-7.651-17.056-17.056-17.056h-64.487zM380.259 929.9c0.716 0.052 1.95 0.012 3.79-0.437 6.192-1.964 66.993-21.227 88.549-27.369 19.421-5.528 49.831-5.504 69.236 0.062 21.324 6.124 81.446 25.297 87.618 27.265 1.812 0.445 3.034 0.49 3.754 0.443 0.032-0.767-0.052-2.091-0.626-4.077-0.042-0.148-0.084-0.299-0.122-0.449l-35.839-140.565h-49.295l11.377 45.511c2.017 8.062-2.885 16.233-10.95 18.25-8.052 2.013-16.233-2.887-18.25-10.95l-13.203-52.811h-8.606l-13.203 52.811c-2.017 8.064-10.193 12.968-18.25 10.95-8.064-2.015-12.966-10.187-10.95-18.25l11.377-45.511h-50.048l-45.796 141.225c-0.528 1.896-0.6 3.164-0.566 3.903zM803.339 43.68c-55.6-50.754-134.14-77.582-227.13-77.582h-128.42c-92.988 0-171.528 26.828-227.128 77.582-50.86 46.428-78.872 110.445-78.872 180.261 0 182.466 114.083 284.1 197.385 358.311 44.907 40.007 81.52 72.633 89.795 108.214h30.044l-9.449-28.349c-2.629-7.886 1.633-16.408 9.519-19.036 1.579-0.526 3.182-0.777 4.762-0.777 6.301 0 12.172 3.989 14.275 10.294l12.623 37.868h42.515l12.623-37.868c2.103-6.307 7.974-10.294 14.275-10.294 1.577 0 3.182 0.251 4.762 0.777 7.886 2.629 12.146 11.15 9.519 19.036l-9.449 28.349h30.046c8.275-35.58 44.889-68.209 89.795-108.214 83.302-74.21 197.385-175.845 197.385-358.311-0.004-69.816-28.014-133.833-78.876-180.261zM511.999 385.469c35.35 0 65.213-18.838 65.213-41.134 0-8.311 6.738-15.049 15.049-15.049s15.049 6.738 15.049 15.049c0 36.108-34.212 65.137-80.262 70.382v17.907c0 8.311-6.738 15.049-15.049 15.049s-15.049-6.738-15.049-15.049v-17.907c-46.050-5.245-80.262-34.274-80.262-70.382 0-39.945 41.865-71.233 95.311-71.233 35.35 0 65.213-18.838 65.213-41.134s-29.864-41.134-65.213-41.134-65.213 18.838-65.213 41.134c0 8.311-6.738 15.049-15.049 15.049s-15.049-6.738-15.049-15.049c0-36.108 34.212-65.137 80.262-70.382v-17.907c0-8.311 6.738-15.049 15.049-15.049s15.049 6.738 15.049 15.049v17.907c46.050 5.245 80.262 34.274 80.262 70.382 0 39.945-41.865 71.233-95.311 71.233-35.35 0-65.213 18.838-65.213 41.134s29.864 41.134 65.213 41.134zM511.999 527.934c-132.218 0-239.784-107.565-239.784-239.784s107.565-239.784 239.784-239.784 239.784 107.565 239.784 239.784-107.565 239.784-239.784 239.784zM511.999 78.466c-115.622 0-209.685 94.063-209.685 209.685s94.063 209.685 209.685 209.685 209.685-94.063 209.685-209.685-94.063-209.685-209.685-209.685z" />
16
+ <glyph unicode="&#xe906;" glyph-name="pa-pa-page" d="M158.897 748.138h706.207v-35.31h-706.207v35.31zM158.897 465.655h706.207v-35.31h-706.207v35.31zM158.897 183.172h706.207v-35.31h-706.207v35.31zM0 960v-1024h1024v1024h-1024zM988.69-28.69h-953.379v953.379h953.379v-953.379z" />
17
+ <glyph unicode="&#xe907;" glyph-name="pa-pa-indicator" d="M517.926 514.963c64.603 0 117.185 52.583 117.185 117.185s-52.583 117.185-117.185 117.185-117.185-52.583-117.185-117.185 52.566-117.185 117.185-117.185zM517.926 715.852c46.154 0 83.704-37.55 83.704-83.704s-37.55-83.704-83.704-83.704-83.704 37.55-83.704 83.704 37.55 83.704 83.704 83.704zM840.655 330.815h-119.881l51.009 73.659c96.343 128.419 82.398 339.503-29.815 451.7-60.618 60.635-141.242 94.033-227.005 94.033-85.746 0-166.37-33.398-227.005-94.033-112.213-112.197-126.159-323.298-30.2-451.197l51.361-74.178h-125.773l-183.345-385.021h1024l-183.345 385.038zM284.928 424.563c-87.035 116.064-74.563 306.691 26.718 407.956 54.307 54.307 126.527 84.223 203.334 84.223s149.010-29.916 203.334-84.223c101.282-101.265 113.754-291.909 26.333-408.458l-229.683-331.685-230.035 332.187zM204.505 297.333h127.799l182.659-263.784 182.642 263.784h121.89l151.471-318.075h-917.93l151.471 318.075z" />
18
+ <glyph unicode="&#xe908;" glyph-name="pa-pa-image" d="M801.31 766.052h-578.619c-36.533 0-66.35-29.817-66.35-66.35v-503.135c0-36.533 29.817-66.35 66.35-66.35h578.35c36.533 0 66.35 29.817 66.35 66.35v502.867c0.269 36.802-29.549 66.619-66.082 66.619zM834.082 196.567c0-17.998-15.043-32.772-33.578-32.772h-577.813c-18.535 0-33.578 15.043-33.578 33.578v134.313l187.232 190.993 169.503-194.753c5.91-6.716 15.043-7.522 22.296-2.955l137.268 96.974 128.403-92.676v-132.701zM834.888 369.561l-119.538 85.96c-5.91 4.567-13.431 4.567-19.341 0l-134.313-95.631-171.652 197.171c-2.955 3.761-7.522 5.104-11.82 5.91-4.567 0-8.865-1.612-12.625-5.104l-176.218-179.173v320.739c0 17.998 15.043 32.772 33.578 32.772h578.35c18.535 0 33.578-15.043 33.578-33.578v-329.066zM613.003 666.661c-47.815 0-85.96-38.682-85.96-85.96-0.806-47.009 38.145-85.96 85.96-85.96s85.96 38.682 85.96 85.96c0 47.815-38.682 85.96-85.96 85.96zM613.003 527.782c-29.012 0-52.919 23.908-52.919 52.919 0 29.817 23.908 52.919 52.919 52.919s52.919-23.908 52.919-52.919-23.639-52.919-52.919-52.919zM0 459.282h156.34v-22.565h-156.34v22.565zM867.66 459.282h156.34v-22.565h-156.34v22.565z" />
19
+ <glyph unicode="&#xe909;" glyph-name="pa-pa-spin" d="M105.6 524.8v-83.2l-80 80-19.2-19.2 104-104h17.6l104 104-19.2 19.2-80-80v80c27.2 188.8 190.4 331.2 380.8 331.2 102.4 0 200-40 272-113.6l19.2 19.2c-76.8 78.4-180.8 120-291.2 120-203.2 0-379.2-152-408-353.6zM921.6 452.8l80-80 19.2 19.2-104 104h-19.2l-104-104 19.2-19.2 80 80v-80c-27.2-188.8-190.4-329.6-382.4-329.6-102.4 0-200 40-272 113.6l-19.2-19.2c78.4-78.4 180.8-120 291.2-120 204.8 0 379.2 152 408 353.6l3.2 81.6z" />
20
+ <glyph unicode="&#xe90a;" glyph-name="pa-pa-typing" d="M874.265 902.99c-49.659 0-94.015-23.118-122.959-59.144-28.948 36.026-73.304 59.144-122.977 59.144-19.232 0-34.823-15.594-34.823-34.826 0-19.228 15.588-34.826 34.823-34.826 48.614 0 88.154-39.622 88.154-88.34v-594.003c0-48.714-39.543-88.336-88.154-88.336-19.232 0-34.823-15.594-34.823-34.826 0-19.235 15.588-34.826 34.823-34.826 49.673 0 94.032 23.118 122.977 59.144 28.944-36.026 73.3-59.144 122.959-59.144 19.235 0 34.826 15.588 34.826 34.826 0 19.228-15.591 34.826-34.826 34.826-48.593 0-88.133 39.622-88.133 88.336v594.006c0 48.718 39.54 88.34 88.133 88.34 19.235 0 34.826 15.594 34.826 34.826 0 19.225-15.591 34.823-34.826 34.823zM989.177 225.437c-9.157 0-18.146-3.72-24.628-10.202-6.475-6.475-10.202-15.457-10.202-24.624 0-9.15 3.727-18.142 10.202-24.617 6.516-6.475 15.467-10.206 24.628-10.206 9.154 0 18.142 3.731 24.621 10.206 6.475 6.475 10.202 15.463 10.202 24.617 0 9.164-3.727 18.149-10.202 24.624-6.478 6.482-15.429 10.202-24.621 10.202zM154.131 225.437c-19.222 0-34.826-15.594-34.826-34.823 0-19.222 15.601-34.823 34.826-34.823 19.218 0 34.826 15.601 34.826 34.823 0 19.228-15.608 34.823-34.826 34.823zM869.907 225.437c-19.256 0-34.823-15.594-34.823-34.823 0-19.222 15.57-34.823 34.823-34.823 19.218 0 34.826 15.601 34.826 34.823-0.003 19.228-15.608 34.823-34.826 34.823zM392.713 225.437c-19.225 0-34.823-15.594-34.823-34.823 0-19.222 15.598-34.823 34.823-34.823 19.256 0 34.823 15.601 34.823 34.823 0 19.228-15.567 34.823-34.823 34.823zM273.436 225.437c-19.256 0-34.819-15.594-34.819-34.823 0-19.222 15.563-34.823 34.819-34.823 19.228 0 34.826 15.601 34.826 34.823-0.003 19.228-15.598 34.823-34.826 34.823zM512.017 225.437c-19.218 0-34.826-15.594-34.826-34.823 0-19.222 15.605-34.823 34.826-34.823s34.826 15.601 34.826 34.823c-0.003 19.228-15.605 34.823-34.826 34.823zM631.287 155.791c19.263 0 34.826 15.601 34.826 34.823 0 19.228-15.563 34.823-34.826 34.823-19.218 0-34.823-15.594-34.823-34.823 0-19.222 15.601-34.823 34.823-34.823zM34.861 225.437c-9.195 0-18.18-3.72-24.659-10.202-6.475-6.475-10.168-15.457-10.168-24.624 0-9.15 3.693-18.142 10.168-24.617 6.516-6.475 15.463-10.206 24.659-10.206 9.154 0 18.108 3.731 24.614 10.206 6.482 6.475 10.212 15.463 10.212 24.617 0 9.164-3.731 18.149-10.212 24.624-6.472 6.482-15.457 10.202-24.614 10.202zM34.861 597.535c-19.259 0-34.826-15.567-34.826-34.788 0-19.263 15.57-34.823 34.826-34.823 19.218 0 34.826 15.563 34.826 34.823 0 19.222-15.608 34.788-34.826 34.788zM34.861 349.479c-19.259 0-34.826-15.594-34.826-34.819s15.57-34.826 34.826-34.826c19.218 0 34.826 15.598 34.826 34.826 0 19.225-15.608 34.819-34.826 34.819zM34.861 473.528c-19.259 0-34.826-15.601-34.826-34.826 0-19.263 15.57-34.826 34.826-34.826 19.218 0 34.826 15.563 34.826 34.826 0 19.225-15.608 34.826-34.826 34.826zM34.861 721.584c-9.157 0-18.146-3.696-24.659-10.174-6.475-6.509-10.202-15.46-10.202-24.652 0-9.157 3.727-18.108 10.202-24.624 6.516-6.478 15.463-10.202 24.659-10.202 9.154 0 18.108 3.724 24.614 10.202 6.482 6.516 10.212 15.463 10.212 24.624 0 9.192-3.731 18.142-10.212 24.648-6.506 6.478-15.491 10.178-24.614 10.178zM631.318 651.931c19.228 0 34.826 15.601 34.826 34.857 0 19.218-15.594 34.792-34.826 34.792-19.253 0-34.854-15.574-34.854-34.792 0-19.253 15.601-34.857 34.854-34.857zM273.436 721.584c-19.256 0-34.819-15.574-34.819-34.792 0-19.256 15.563-34.857 34.819-34.857 19.228 0 34.826 15.601 34.826 34.857-0.003 19.218-15.598 34.792-34.826 34.792zM392.713 721.584c-19.225 0-34.823-15.574-34.823-34.792 0-19.256 15.598-34.857 34.823-34.857 19.256 0 34.823 15.601 34.823 34.857 0 19.218-15.567 34.792-34.823 34.792zM869.907 721.584c-19.256 0-34.823-15.574-34.823-34.792 0-19.256 15.57-34.857 34.823-34.857 19.218 0 34.826 15.601 34.826 34.857-0.003 19.218-15.608 34.792-34.826 34.792zM154.131 721.584c-19.222 0-34.826-15.574-34.826-34.792 0-19.256 15.601-34.857 34.826-34.857 19.218 0 34.826 15.601 34.826 34.857 0 19.218-15.608 34.792-34.826 34.792zM512.017 721.584c-19.253 0-34.826-15.574-34.826-34.792 0-19.256 15.574-34.857 34.826-34.857 19.222 0 34.826 15.601 34.826 34.857-0.003 19.218-15.605 34.792-34.826 34.792zM989.177 651.931c9.192 0 18.142 3.724 24.621 10.202 6.509 6.482 10.202 15.463 10.202 24.624 0 9.192-3.693 18.173-10.202 24.648-6.478 6.478-15.463 10.174-24.621 10.174s-18.111-3.696-24.628-10.174c-6.475-6.509-10.202-15.457-10.202-24.648 0-9.157 3.727-18.108 10.202-24.624 6.485-6.475 15.47-10.202 24.628-10.202zM989.177 349.479c-19.225 0-34.83-15.594-34.83-34.819s15.601-34.826 34.83-34.826c19.253 0 34.823 15.598 34.823 34.826 0 19.225-15.57 34.819-34.823 34.819zM989.177 473.528c-19.225 0-34.83-15.601-34.83-34.826s15.601-34.826 34.83-34.826c19.253 0 34.823 15.598 34.823 34.826 0 19.225-15.57 34.826-34.823 34.826zM989.177 597.573c-19.225 0-34.83-15.601-34.83-34.826 0-19.263 15.601-34.823 34.83-34.823 19.253 0 34.823 15.563 34.823 34.823 0 19.222-15.57 34.826-34.823 34.826z" />
21
+ <glyph unicode="&#xe90b;" glyph-name="pa-pa-header" d="M1024-36.234v968.469c0 15.327-12.439 27.766-27.766 27.766h-968.469c-15.327 0-27.766-12.439-27.766-27.766v-968.469c0-15.327 12.439-27.766 27.766-27.766h968.469c15.327 0 27.766 12.439 27.766 27.766zM968.469-8.469h-912.937v912.937h912.937v-912.937zM337.187 211.436c15.327 0 27.766 12.439 27.766 27.766v181.033h294.317v-181.033c0-15.327 12.439-27.766 27.766-27.766s27.766 12.439 27.766 27.766v417.597c0 15.327-12.439 27.766-27.766 27.766s-27.766-12.439-27.766-27.766v-181.033h-294.317v181.033c0 15.327-12.439 27.766-27.766 27.766s-27.766-12.439-27.766-27.766v-417.597c0-15.327 12.439-27.766 27.766-27.766z" />
22
+ <glyph unicode="&#xe90c;" glyph-name="pa-pa-counter" d="M508.586 115.198c-7.077 0-12.8-5.72-12.8-12.8v-153.599c0-7.077 5.72-12.8 12.8-12.8s12.8 5.722 12.8 12.8v153.599c0 7.077-5.72 12.8-12.8 12.8zM508.586 960c-7.077 0-12.8-5.72-12.8-12.8v-153.612c0-7.077 5.72-12.8 12.8-12.8s12.8 5.722 12.8 12.8v153.612c0 7.077-5.72 12.8-12.8 12.8zM884.75 636.062c-4.608 10.841-43.814 94.603-150.168 94.603s-145.548-83.775-150.155-94.603c-4.456-7.973-33.306-64.446-33.306-188.067 0-168.972 68.582-269.859 183.459-269.859 114.88 0 183.472 100.888 183.476 269.859 0 123.632-28.852 180.105-33.306 188.067zM734.593 203.734c-98.853 0-157.86 91.313-157.86 244.258 0 122.957 29.901 175.358 30.17 175.819l0.998 2.060c0.294 0.794 31.027 79.193 126.68 79.193 95.053 0 125.463-75.992 126.718-79.193l0.998-2.060c0.294-0.5 30.17-51.724 30.17-175.819 0-152.945-59.007-244.258-157.873-244.258zM342.562 474.242c-9.332 3.943-18.944 7.207-28.532 9.908 26.636 7.77 48.525 18.944 64.55 33.267 1.792 1.498 43.801 37.158 43.801 93.836 0 22.669-6.631 55.449-39.13 83.634-10.648 10.752-42.905 35.776-112.075 35.776-76.198 0-140.964-47.936-143.691-49.971l15.373-20.48c0.576 0.448 60.555 44.85 128.305 44.85 61.208 0 87.32-21.58 94.142-28.467 0.409-0.409 1.114-1.050 2.099-1.894 19.481-16.869 29.35-38.219 29.35-63.448 0-44.826-34.252-73.882-34.598-74.163l-1.318-1.164c-15.808-14.157-54.962-37.593-141.399-39.013-5.030 0.091-8.153-0.050-8.729-0.076l0.435-25.586c2.483 0 4.965 0.013 7.424 0.052 18.546-0.13 70.577-2.292 113.982-20.634 56.345-23.807 87.385-65.086 87.385-116.209 0-42.944-16.87-76.211-51.57-101.669-26.636-19.559-60.273-29.055-102.821-29.055-48.114 0-92.146 18.226-147.595 47.64l-12.005-22.63c58.929-31.244 106.186-50.61 159.6-50.61 48.203 0 86.781 11.122 118.003 33.993 41.152 30.22 62.028 71.371 62.028 122.327 0 62.078-36.596 111.729-103.013 139.786z" />
23
+ <glyph unicode="&#xe90d;" glyph-name="pa-pa-count" d="M840.433 711.924l41.392 41.392 18.315-18.315 23.257 23.237-61.913 61.913-23.257-23.257 20.341-20.321-41.822-41.822c-81.013 72.438-187.774 116.606-304.721 116.606-252.408 0-457.691-205.318-457.691-457.671 0-252.368 205.283-457.691 457.691-457.691 252.298 0 457.636 205.338 457.636 457.691 0.005 123.555-49.341 235.809-129.228 318.238zM530.79-30.667v81.048h-37.6v-81.048c-220.091 9.595-397.174 187.454-405.624 407.845h66.55v32.907h-66.55c8.484 221.182 186.809 399.486 408.025 407.97v-70.737h32.852v70.737c221.167-8.484 399.486-186.789 407.955-407.97h-61.803v-32.907h61.803c-8.484-220.391-185.518-398.245-405.609-407.845zM530.79 447.039v249.346c0 10.671-6.874 19.265-15.363 19.265-8.54 0-15.398-8.575-15.398-19.265v-247.195c-25.639-5.513-44.904-28.29-44.904-55.519 0-27.304 19.265-50.076 44.904-55.574v-24.763c0-10.691 6.874-19.3 15.398-19.3 8.484 0 15.363 8.61 15.363 19.3v26.909c22.077 7.804 38.010 28.665 38.010 53.423 0 24.763-15.933 45.624-38.010 53.373zM495.591 960h32.852v-87.551h-32.852v87.551z" />
24
+ <glyph unicode="&#xe90e;" glyph-name="pa-pa-points" d="M307.2 516.267c-37.649 0-68.267-30.618-68.267-68.267s30.618-68.267 68.267-68.267 68.267 30.618 68.267 68.267-30.618 68.267-68.267 68.267zM512 516.267c-37.649 0-68.267-30.618-68.267-68.267s30.618-68.267 68.267-68.267 68.267 30.618 68.267 68.267-30.618 68.267-68.267 68.267zM785.067 448c0 37.649-30.618 68.267-68.267 68.267s-68.267-30.618-68.267-68.267 30.618-68.267 68.267-68.267 68.267 30.618 68.267 68.267zM41.199 448l226.867 226.867c6.673 6.673 6.673 17.459 0 24.132s-17.459 6.673-24.132 0l-238.933-238.933c-6.673-6.673-6.673-17.459 0-24.132l238.933-238.933c3.328-3.328 7.697-5.001 12.066-5.001s8.738 1.673 12.066 5.001c6.673 6.673 6.673 17.459 0 24.132l-226.867 226.867zM1018.999 460.066l-238.933 238.933c-6.673 6.673-17.459 6.673-24.132 0s-6.673-17.459 0-24.132l226.867-226.867-226.867-226.867c-6.673-6.673-6.673-17.459 0-24.132 3.328-3.328 7.697-5.001 12.066-5.001s8.738 1.673 12.066 5.001l238.933 238.933c6.673 6.673 6.673 17.459 0 24.132z" />
25
+ <glyph unicode="&#xe90f;" glyph-name="pa-pa-post" d="M900.76 781.103h-200.029c-11.508 0-20.714-9.206-20.714-20.714s9.206-20.714 20.714-20.714h200.029c22.597 0 41.010-18.413 41.010-41.010v-514.302c0-22.597-18.413-41.010-41.010-41.010h-777.311c-22.597 0-41.010 18.413-41.010 41.010v514.302c0 22.597 18.413 41.010 41.010 41.010h202.959c11.508 0 20.714 9.206 20.714 20.714s-9.206 20.714-20.714 20.714h-203.168c-45.404 0-82.439-37.035-82.439-82.439v-514.302c0-45.404 37.035-82.439 82.439-82.439h368.046v-124.495h-171.992c-11.508 0-20.714-9.206-20.714-20.714s9.206-20.714 20.714-20.714h385.203c11.508 0 20.714 9.206 20.714 20.714s-9.206 20.714-20.714 20.714h-171.992v124.495h368.046c45.404 0 82.439 37.035 82.439 82.439v514.302c0.418 45.404-36.826 82.439-82.23 82.439zM628.754 878.607c0 44.776-36.407 81.393-81.393 81.393h-70.931c-44.776 0-81.393-36.407-81.393-81.393v-48.752c0-1.255 0.209-2.511 0.418-3.557-0.209-1.255-0.418-2.302-0.418-3.557v-404.244c0-4.603 1.465-8.997 4.185-12.554l96.039-126.169c3.975-5.231 10.043-8.16 16.53-8.16s12.554 2.929 16.53 8.16l96.039 126.169c2.72 3.557 4.185 7.951 4.185 12.554v404.871c0 1.046-0.209 2.302-0.418 3.348 0.209 1.046 0.418 2.092 0.418 3.348v48.543h0.209zM436.884 809.141h54.611v-367h-54.611v367zM512.209 326.434l-56.703 74.488h113.406l-56.703-74.488zM587.534 442.141h-54.611v367h54.611v-367zM587.534 850.57h-150.65v28.038c0 21.97 17.994 39.964 39.964 39.964h70.931c21.97 0 39.964-17.994 39.964-39.964v-28.038c0 0-0.209 0-0.209 0z" />
26
+ <glyph unicode="&#xe910;" glyph-name="pa-pa-image2" d="M922.942 426.125c-20.551 20.551-53.972 20.515-74.522 0l-271.731-271.731-37.447-137.34-9.163-9.163c-6.85-6.85-6.868-17.902-0.106-24.806l-0.088-0.353 0.335 0.088c3.425-3.372 7.874-5.085 12.341-5.085 4.52 0 9.039 1.73 12.482 5.173l9.181 9.181 137.322 37.447 271.713 271.731c20.551 20.551 20.551 53.99 0 74.54l-50.317 50.317zM617.454 145.214l180.842 180.842 74.911-74.911-180.842-180.842-74.911 74.911zM601.512 111.228l56.85-56.85-78.177-21.327 21.327 78.177zM948.277 326.25l-50.123-50.123-74.911 74.893 50.123 50.123c6.797 6.797 17.832 6.78 24.611 0.018l50.317-50.317c6.78-6.78 6.78-17.832-0.018-24.594zM380.804 678.665c0 54.219-44.103 98.322-98.322 98.322s-98.322-44.103-98.322-98.322c0-54.201 44.103-98.304 98.322-98.304s98.322 44.103 98.322 98.304zM219.471 678.665c0 34.745 28.266 63.011 63.011 63.011s63.011-28.284 63.011-63.011-28.266-62.994-63.011-62.994-63.011 28.266-63.011 62.994zM110.345 270.989c3.478-3.972 8.351-5.985 13.241-5.985 4.131 0 8.298 1.448 11.652 4.396l288.009 253.564 146.873-146.856c6.903-6.903 18.061-6.903 24.964 0s6.903 18.061 0 24.964l-49.876 49.858 162.269 177.699 145.867-129.66c7.309-6.497 18.45-5.826 24.929 1.465 6.479 7.274 5.826 18.45-1.465 24.911l-158.897 141.241c-7.239 6.444-18.273 5.879-24.77-1.289l-172.915-189.387-83.738 83.738c-6.603 6.585-17.161 6.903-24.152 0.777l-300.42-264.51c-7.309-6.444-8.033-17.602-1.571-24.929zM1006.345 918.246h-988.69c-9.746 0-17.655-7.892-17.655-17.655v-776.828c0-9.763 7.91-17.655 17.655-17.655h459.034c9.746 0 17.655 7.892 17.655 17.655s-7.91 17.655-17.655 17.655h-441.379v741.517h953.379v-423.724c0-9.763 7.91-17.655 17.655-17.655s17.655 7.892 17.655 17.655v441.379c0 9.746-7.91 17.655-17.655 17.655z" />
27
+ </font></defs></svg>
admin/assets/pa-elements-font/fonts/pa-elements.ttf ADDED
Binary file
admin/assets/pa-elements-font/fonts/pa-elements.woff ADDED
Binary file
admin/settings-page.php ADDED
@@ -0,0 +1,266 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if( ! defined( 'ABSPATH' ) ) exit(); // Exit if accessed directly
4
+
5
+ class PA_admin_settings {
6
+
7
+ public $pa_elements_keys = ['premium-banner', 'premium-blog','premium-carousel', 'premium-countdown','premium-counter','premium-dual-header','premium-fancytext','premium-image-separator','premium-maps','premium-modalbox','premium-person','premium-progressbar','premium-testimonials','premium-title','premium-videobox'];
8
+
9
+ private $pa_default_settings;
10
+
11
+ private $pa_settings;
12
+
13
+ private $pa_get_settings;
14
+
15
+ public function __construct() {
16
+ add_action( 'admin_menu', array( $this,'pa_admin_menu') );
17
+ add_action('init', array( $this, 'pa_admin_page_scripts' ) );
18
+ add_action( 'wp_ajax_save_settings_with_ajax', array( $this, 'pa_save_settings_with_ajax' ) );
19
+ }
20
+
21
+ public function pa_admin_page_scripts () {
22
+ wp_enqueue_style( 'premium_addons_elementor-css', plugins_url( '/', __FILE__ ).'assets/admin.css' );
23
+ wp_enqueue_style('font-awesome', plugins_url( '/' , __FILE__ ).'assets/font-awesome/css/font-awesome.min.css');
24
+ wp_enqueue_style( 'premium_addons-sweetalert2-css', plugins_url( '/', __FILE__ ).'assets/js/sweetalert2/css/sweetalert2.min.css' );
25
+ wp_enqueue_script('pa-addons-elementor-admin-js', plugins_url( '/' , __FILE__ ).'assets/admin.js' , array('jquery','jquery-ui-tabs'), '1.0' , true );
26
+ wp_enqueue_script( 'premium_addons_sweet-js', plugins_url( '/', __FILE__ ).'assets/js/sweetalert2/js/core.js', array( 'jquery' ), '1.0', true );
27
+ wp_enqueue_script( 'premium_addons_sweetalert2-js', plugins_url( '/', __FILE__ ).'assets/js/sweetalert2/js/sweetalert2.min.js', array( 'jquery', 'premium_addons_sweet-js' ), '1.0', true );
28
+ }
29
+
30
+ public function pa_admin_menu() {
31
+ add_menu_page( 'Premium Addons for Elementor', 'Premium Addons for Elementor', 'manage_options', 'pa-settings-page', array( $this , 'pa_admin_page' ), 'dashicons-star-empty', 100 );
32
+ }
33
+
34
+ public function pa_admin_page(){
35
+ $js_info = array(
36
+ 'ajaxurl' => admin_url( 'admin-ajax.php' )
37
+ );
38
+ wp_localize_script( 'pa-addons-elementor-admin-js', 'settings', $js_info );
39
+
40
+ $this->pa_default_settings = array_fill_keys( $this->pa_elements_keys, true );
41
+ $this->pa_get_settings = get_option( 'pa_save_settings', $this->pa_default_settings );
42
+ $pa_new_settings = array_diff_key( $this->pa_default_settings, $this->pa_get_settings );
43
+ if( ! empty( $pa_new_settings ) ) {
44
+ $pa_updated_settings = array_merge( $this->pa_get_settings, $pa_new_settings );
45
+ update_option( 'pa_save_settings', $pa_updated_settings );
46
+ }
47
+ $this->pa_get_settings = get_option( 'pa_save_settings', $this->pa_default_settings );
48
+ ?>
49
+ <div class="wrap">
50
+ <div class="response-wrap"></div>
51
+ <form action="" method="POST" id="pa-settings" name="pa-settings">
52
+ <div class="pa-header-wrapper">
53
+ <div class="pa-title-left">
54
+ <h1 class="pa-title"><?php echo esc_html__('Premium Addons for Elementor', 'premium_elementor'); ?></h1>
55
+ </div>
56
+ <div class="pa-title-right">
57
+ <input type="submit" value="Save Settings" class="button pa-btn pa-save-button">
58
+ </div>
59
+ </div>
60
+ <div class="pa-settings">
61
+ <h1>PREMIUM ADDONS ELEMENTS</h1>
62
+ <div id="elements" class="pa-settings-tab">
63
+ <p class="pa-elements-notice">Choosing only the elements which you need will improve your site loading speed</p>
64
+ <div class="pa-row">
65
+ <table class="pa-elements-table">
66
+ <tr>
67
+ <td>
68
+ <div class="pa-element-wrapper">
69
+ <label class="switch">
70
+ <input type="checkbox" id="premium-banner" name="premium-banner" <?php checked(1, $this->pa_get_settings['premium-banner'], true) ?>>
71
+ <span class="slider round"></span>
72
+ </label>
73
+ <p class="pa-element-name"><?php echo esc_html__('Premium Banner', 'premium_elementor'); ?></p>
74
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Banner', 'premium_elementor');?></p>
75
+ </div>
76
+ </td>
77
+ <td>
78
+ <div class="pa-element-wrapper">
79
+ <label class="switch">
80
+ <input type="checkbox" id="premium-blog" name="premium-blog" <?php checked(1, $this->pa_get_settings['premium-blog'], true) ?>>
81
+ <span class="slider round"></span>
82
+ </label>
83
+ <p class="pa-element-name"><?php echo esc_html__('Premium Blog', 'premium_elementor'); ?></p>
84
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Blog', 'premium_elementor');?></p>
85
+ </div>
86
+ </td>
87
+ <td>
88
+ <div class="pa-element-wrapper">
89
+ <label class="switch">
90
+ <input type="checkbox" id="premium-carousel" name="premium-carousel" <?php checked(1, $this->pa_get_settings['premium-carousel'], true) ?>>
91
+ <span class="slider round"></span>
92
+ </label>
93
+ <p class="pa-element-name"><?php echo esc_html__('Premium Carousel', 'premium_elementor'); ?></p>
94
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Carousel', 'premium_elementor');?></p>
95
+ </div>
96
+ </td>
97
+ <td>
98
+ <div class="pa-element-wrapper">
99
+ <label class="switch">
100
+ <input type="checkbox" id="premium-countdown" name="premium-countdown" <?php checked(1, $this->pa_get_settings['premium-countdown'], true) ?>>
101
+ <span class="slider round"></span>
102
+ </label>
103
+ <p class="pa-element-name"><?php echo esc_html__('Premium Countdown', 'premium_elementor'); ?></p>
104
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Countdown', 'premium_elementor');?></p>
105
+ </div>
106
+ </td>
107
+ <td>
108
+ <div class="pa-element-wrapper">
109
+ <label class="switch">
110
+ <input type="checkbox" id="premium-counter" name="premium-counter" <?php checked(1, $this->pa_get_settings['premium-counter'], true) ?>>
111
+ <span class="slider round"></span>
112
+ </label>
113
+ <p class="pa-element-name"><?php echo esc_html__('Premium Counter', 'premium_elementor'); ?></p>
114
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Counter', 'premium_elementor');?></p>
115
+ </div>
116
+ </td>
117
+ </tr>
118
+ <tr>
119
+ <td>
120
+ <div class="pa-element-wrapper">
121
+ <label class="switch">
122
+ <input type="checkbox" id="premium-dual-header" name="premium-dual-header" <?php checked(1, $this->pa_get_settings['premium-dual-header'], true) ?>>
123
+ <span class="slider round"></span>
124
+ </label>
125
+ <p class="pa-element-name"><?php echo esc_html__('Premium Dual Header', 'premium_elementor'); ?></p>
126
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Dual Header', 'premium_elementor');?></p>
127
+ </div>
128
+ </td>
129
+ <td>
130
+ <div class="pa-element-wrapper">
131
+ <label class="switch">
132
+ <input type="checkbox" id="premium-fancytext" name="premium-fancytext" <?php checked(1, $this->pa_get_settings['premium-fancytext'], true) ?>>
133
+ <span class="slider round"></span>
134
+ </label>
135
+ <p class="pa-element-name"><?php echo esc_html__('Premium Fancy Text', 'premium_elementor'); ?></p>
136
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Fancy Text', 'premium_elementor');?></p>
137
+ </div>
138
+ </td>
139
+ <td>
140
+ <div class="pa-element-wrapper">
141
+ <label class="switch">
142
+ <input type="checkbox" id="premium-image-separator" name="premium-image-separator" <?php checked(1, $this->pa_get_settings['premium-image-separator'], true) ?>>
143
+ <span class="slider round"></span>
144
+ </label>
145
+ <p class="pa-element-name"><?php echo esc_html__('Premium Image Separator', 'premium_elementor'); ?></p>
146
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Image Separator', 'premium_elementor');?></p>
147
+ </div>
148
+ </td>
149
+ <td>
150
+ <div class="pa-element-wrapper">
151
+ <label class="switch">
152
+ <input type="checkbox" id="premium-maps" name="premium-maps" <?php checked(1, $this->pa_get_settings['premium-maps'], true) ?>>
153
+ <span class="slider round"></span>
154
+ </label>
155
+ <p class="pa-element-name"><?php echo esc_html__('Premium Maps', 'premium_elementor'); ?></p>
156
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Maps', 'premium_elementor');?></p>
157
+ </div>
158
+ </td>
159
+ <td>
160
+ <div class="pa-element-wrapper">
161
+ <label class="switch">
162
+ <input type="checkbox" id="premium-modalbox" name="premium-modalbox" <?php checked(1, $this->pa_get_settings['premium-modalbox'], true) ?>>
163
+ <span class="slider round"></span>
164
+ </label>
165
+ <p class="pa-element-name"><?php echo esc_html__('Premium Modal Box', 'premium_elementor'); ?></p>
166
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Modal Box', 'premium_elementor');?></p>
167
+ </div>
168
+ </td>
169
+ </tr>
170
+ <tr>
171
+ <td>
172
+ <div class="pa-element-wrapper">
173
+ <label class="switch">
174
+ <input type="checkbox" id="premium-person" name="premium-person" <?php checked(1, $this->pa_get_settings['premium-person'], true) ?>>
175
+ <span class="slider round"></span>
176
+ </label>
177
+ <p class="pa-element-name"><?php echo esc_html__('Premium Person', 'premium_elementor'); ?></p>
178
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Person', 'premium_elementor');?></p>
179
+ </div>
180
+ </td>
181
+ <td>
182
+ <div class="pa-element-wrapper">
183
+ <label class="switch">
184
+ <input type="checkbox" id="premium-progressbar" name="premium-progressbar" <?php checked(1, $this->pa_get_settings['premium-progressbar'], true) ?>>
185
+ <span class="slider round"></span>
186
+ </label>
187
+ <p class="pa-element-name"><?php echo esc_html__('Premium Progress Bar', 'premium_elementor'); ?></p>
188
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Progress Bar', 'premium_elementor');?></p>
189
+ </div>
190
+ </td>
191
+ <td>
192
+ <div class="pa-element-wrapper">
193
+ <label class="switch">
194
+ <input type="checkbox" id="premium-testimonials" name="premium-testimonials" <?php checked(1, $this->pa_get_settings['premium-testimonials'], true) ?>>
195
+ <span class="slider round"></span>
196
+ </label>
197
+ <p class="pa-element-name"><?php echo esc_html__('Premium Testimonials', 'premium_elementor'); ?></p>
198
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Testimonials', 'premium_elementor');?></p>
199
+ </div>
200
+ </td>
201
+ <td>
202
+ <div class="pa-element-wrapper">
203
+ <label class="switch">
204
+ <input type="checkbox" id="premium-title" name="premium-title" <?php checked(1, $this->pa_get_settings['premium-title'], true) ?>>
205
+ <span class="slider round"></span>
206
+ </label>
207
+ <p class="pa-element-name"><?php echo esc_html__('Premium Title', 'premium_elementor'); ?></p>
208
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Title', 'premium_elementor');?></p>
209
+ </div>
210
+ </td>
211
+ <td>
212
+ <div class="pa-element-wrapper">
213
+ <label class="switch">
214
+ <input type="checkbox" id="premium-videobox" name="premium-videobox" <?php checked(1, $this->pa_get_settings['premium-videobox'], true) ?>>
215
+ <span class="slider round"></span>
216
+ </label>
217
+ <p class="pa-element-name"><?php echo esc_html__('Premium Video Box', 'premium_elementor'); ?></p>
218
+ <p class="pa-element-desc"><?php echo esc_html__('Enable/Disable Premium Video Box', 'premium_elementor');?></p>
219
+ </div>
220
+ </td>
221
+ </tr>
222
+ </table>
223
+ <input type="submit" value="Save Settings" class="button pa-btn pa-save-button">
224
+ </div>
225
+ </div>
226
+ </div>
227
+ </form>
228
+ </div>
229
+ <?php
230
+ }
231
+
232
+ public function pa_save_settings_with_ajax() {
233
+
234
+ if( isset( $_POST['fields'] ) ) {
235
+ parse_str( $_POST['fields'], $settings );
236
+ }else {
237
+ return;
238
+ }
239
+
240
+ $this->pa_settings = array(
241
+ 'premium-banner' => intval( $settings['premium-banner'] ? 1 : 0 ),
242
+ 'premium-blog' => intval( $settings['premium-blog'] ? 1 : 0 ),
243
+ 'premium-carousel' => intval( $settings['premium-carousel'] ? 1 : 0 ),
244
+ 'premium-countdown' => intval( $settings['premium-countdown'] ? 1 : 0 ),
245
+ 'premium-counter' => intval( $settings['premium-counter'] ? 1 : 0 ),
246
+ 'premium-dual-header' => intval( $settings['premium-dual-header'] ? 1 : 0 ),
247
+ 'premium-fancytext' => intval( $settings['premium-fancytext'] ? 1 : 0 ),
248
+ 'premium-image-separator' => intval( $settings['premium-image-separator'] ? 1 : 0 ),
249
+ 'premium-maps' => intval( $settings['premium-maps'] ? 1 : 0 ),
250
+ 'premium-modalbox' => intval( $settings['premium-modalbox'] ? 1 : 0 ),
251
+ 'premium-person' => intval( $settings['premium-person'] ? 1 : 0 ),
252
+ 'premium-progressbar' => intval( $settings['premium-progressbar'] ? 1 : 0 ),
253
+ 'premium-testimonials' => intval( $settings['premium-testimonials'] ? 1 : 0 ),
254
+ 'premium-title' => intval( $settings['premium-title'] ? 1 : 0 ),
255
+ 'premium-videobox' => intval( $settings['premium-videobox'] ? 1 : 0 ),
256
+ 'wisdom_registered_setting' => 1,
257
+ );
258
+ update_option( 'pa_save_settings', $this->pa_settings );
259
+ return true;
260
+ die();
261
+
262
+
263
+ }
264
+ }
265
+
266
+ new PA_admin_settings();
assets/css/ajax-loader.gif ADDED
Binary file
assets/css/animate.css ADDED
@@ -0,0 +1,1579 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
2
+
3
+ /*!
4
+ * animate.css -http://daneden.me/animate
5
+ * Version - 3.5.2
6
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
7
+ *
8
+ * Copyright (c) 2017 Daniel Eden
9
+ */
10
+
11
+ .animated {
12
+ animation-duration: 1s;
13
+ animation-fill-mode: both;
14
+ }
15
+
16
+ .animated.infinite {
17
+ animation-iteration-count: infinite;
18
+ }
19
+
20
+ .animated.hinge {
21
+ animation-duration: 2s;
22
+ }
23
+
24
+ .animated.flipOutX,
25
+ .animated.flipOutY,
26
+ .animated.bounceIn,
27
+ .animated.bounceOut {
28
+ animation-duration: .75s;
29
+ }
30
+
31
+ @keyframes bounce {
32
+ from, 20%, 53%, 80%, to {
33
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
34
+ transform: translate3d(0,0,0);
35
+ }
36
+
37
+ 40%, 43% {
38
+ animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
39
+ transform: translate3d(0, -30px, 0);
40
+ }
41
+
42
+ 70% {
43
+ animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
44
+ transform: translate3d(0, -15px, 0);
45
+ }
46
+
47
+ 90% {
48
+ transform: translate3d(0,-4px,0);
49
+ }
50
+ }
51
+
52
+ .bounce {
53
+ animation-name: bounce;
54
+ transform-origin: center bottom;
55
+ }
56
+
57
+ @keyframes flash {
58
+ from, 50%, to {
59
+ opacity: 1;
60
+ }
61
+
62
+ 25%, 75% {
63
+ opacity: 0;
64
+ }
65
+ }
66
+
67
+ .flash {
68
+ animation-name: flash;
69
+ }
70
+
71
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
72
+
73
+ @keyframes pulse {
74
+ from {
75
+ transform: scale3d(1, 1, 1);
76
+ }
77
+
78
+ 50% {
79
+ transform: scale3d(1.05, 1.05, 1.05);
80
+ }
81
+
82
+ to {
83
+ transform: scale3d(1, 1, 1);
84
+ }
85
+ }
86
+
87
+ .pulse {
88
+ animation-name: pulse;
89
+ }
90
+
91
+ @keyframes rubberBand {
92
+ from {
93
+ transform: scale3d(1, 1, 1);
94
+ }
95
+
96
+ 30% {
97
+ transform: scale3d(1.25, 0.75, 1);
98
+ }
99
+
100
+ 40% {
101
+ transform: scale3d(0.75, 1.25, 1);
102
+ }
103
+
104
+ 50% {
105
+ transform: scale3d(1.15, 0.85, 1);
106
+ }
107
+
108
+ 65% {
109
+ transform: scale3d(.95, 1.05, 1);
110
+ }
111
+
112
+ 75% {
113
+ transform: scale3d(1.05, .95, 1);
114
+ }
115
+
116
+ to {
117
+ transform: scale3d(1, 1, 1);
118
+ }
119
+ }
120
+
121
+ .rubberBand {
122
+ animation-name: rubberBand;
123
+ }
124
+
125
+ @keyframes shake {
126
+ from, to {
127
+ transform: translate3d(0, 0, 0);
128
+ }
129
+
130
+ 10%, 30%, 50%, 70%, 90% {
131
+ transform: translate3d(-10px, 0, 0);
132
+ }
133
+
134
+ 20%, 40%, 60%, 80% {
135
+ transform: translate3d(10px, 0, 0);
136
+ }
137
+ }
138
+
139
+ .shake {
140
+ animation-name: shake;
141
+ }
142
+
143
+ @keyframes headShake {
144
+ 0% {
145
+ transform: translateX(0);
146
+ }
147
+
148
+ 6.5% {
149
+ transform: translateX(-6px) rotateY(-9deg);
150
+ }
151
+
152
+ 18.5% {
153
+ transform: translateX(5px) rotateY(7deg);
154
+ }
155
+
156
+ 31.5% {
157
+ transform: translateX(-3px) rotateY(-5deg);
158
+ }
159
+
160
+ 43.5% {
161
+ transform: translateX(2px) rotateY(3deg);
162
+ }
163
+
164
+ 50% {
165
+ transform: translateX(0);
166
+ }
167
+ }
168
+
169
+ .headShake {
170
+ animation-timing-function: ease-in-out;
171
+ animation-name: headShake;
172
+ }
173
+
174
+ @keyframes swing {
175
+ 20% {
176
+ transform: rotate3d(0, 0, 1, 15deg);
177
+ }
178
+
179
+ 40% {
180
+ transform: rotate3d(0, 0, 1, -10deg);
181
+ }
182
+
183
+ 60% {
184
+ transform: rotate3d(0, 0, 1, 5deg);
185
+ }
186
+
187
+ 80% {
188
+ transform: rotate3d(0, 0, 1, -5deg);
189
+ }
190
+
191
+ to {
192
+ transform: rotate3d(0, 0, 1, 0deg);
193
+ }
194
+ }
195
+
196
+ .swing {
197
+ transform-origin: top center;
198
+ animation-name: swing;
199
+ }
200
+
201
+ @keyframes tada {
202
+ from {
203
+ transform: scale3d(1, 1, 1);
204
+ }
205
+
206
+ 10%, 20% {
207
+ transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
208
+ }
209
+
210
+ 30%, 50%, 70%, 90% {
211
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
212
+ }
213
+
214
+ 40%, 60%, 80% {
215
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
216
+ }
217
+
218
+ to {
219
+ transform: scale3d(1, 1, 1);
220
+ }
221
+ }
222
+
223
+ .tada {
224
+ animation-name: tada;
225
+ }
226
+
227
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
228
+
229
+ @keyframes wobble {
230
+ from {
231
+ transform: none;
232
+ }
233
+
234
+ 15% {
235
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
236
+ }
237
+
238
+ 30% {
239
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
240
+ }
241
+
242
+ 45% {
243
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
244
+ }
245
+
246
+ 60% {
247
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
248
+ }
249
+
250
+ 75% {
251
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
252
+ }
253
+
254
+ to {
255
+ transform: none;
256
+ }
257
+ }
258
+
259
+ .wobble {
260
+ animation-name: wobble;
261
+ }
262
+
263
+ @keyframes jello {
264
+ from, 11.1%, to {
265
+ transform: none;
266
+ }
267
+
268
+ 22.2% {
269
+ transform: skewX(-12.5deg) skewY(-12.5deg);
270
+ }
271
+
272
+ 33.3% {
273
+ transform: skewX(6.25deg) skewY(6.25deg);
274
+ }
275
+
276
+ 44.4% {
277
+ transform: skewX(-3.125deg) skewY(-3.125deg);
278
+ }
279
+
280
+ 55.5% {
281
+ transform: skewX(1.5625deg) skewY(1.5625deg);
282
+ }
283
+
284
+ 66.6% {
285
+ transform: skewX(-0.78125deg) skewY(-0.78125deg);
286
+ }
287
+
288
+ 77.7% {
289
+ transform: skewX(0.390625deg) skewY(0.390625deg);
290
+ }
291
+
292
+ 88.8% {
293
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
294
+ }
295
+ }
296
+
297
+ .jello {
298
+ animation-name: jello;
299
+ transform-origin: center;
300
+ }
301
+
302
+ @keyframes bounceIn {
303
+ from, 20%, 40%, 60%, 80%, to {
304
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
305
+ }
306
+
307
+ 0% {
308
+ opacity: 0;
309
+ transform: scale3d(.3, .3, .3);
310
+ }
311
+
312
+ 20% {
313
+ transform: scale3d(1.1, 1.1, 1.1);
314
+ }
315
+
316
+ 40% {
317
+ transform: scale3d(.9, .9, .9);
318
+ }
319
+
320
+ 60% {
321
+ opacity: 1;
322
+ transform: scale3d(1.03, 1.03, 1.03);
323
+ }
324
+
325
+ 80% {
326
+ transform: scale3d(.97, .97, .97);
327
+ }
328
+
329
+ to {
330
+ opacity: 1;
331
+ transform: scale3d(1, 1, 1);
332
+ }
333
+ }
334
+
335
+ .bounceIn {
336
+ animation-name: bounceIn;
337
+ }
338
+
339
+ @keyframes bounceInDown {
340
+ from, 60%, 75%, 90%, to {
341
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
342
+ }
343
+
344
+ 0% {
345
+ opacity: 0;
346
+ transform: translate3d(0, -3000px, 0);
347
+ }
348
+
349
+ 60% {
350
+ opacity: 1;
351
+ transform: translate3d(0, 25px, 0);
352
+ }
353
+
354
+ 75% {
355
+ transform: translate3d(0, -10px, 0);
356
+ }
357
+
358
+ 90% {
359
+ transform: translate3d(0, 5px, 0);
360
+ }
361
+
362
+ to {
363
+ transform: none;
364
+ }
365
+ }
366
+
367
+ .bounceInDown {
368
+ animation-name: bounceInDown;
369
+ }
370
+
371
+ @keyframes bounceInLeft {
372
+ from, 60%, 75%, 90%, to {
373
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
374
+ }
375
+
376
+ 0% {
377
+ opacity: 0;
378
+ transform: translate3d(-3000px, 0, 0);
379
+ }
380
+
381
+ 60% {
382
+ opacity: 1;
383
+ transform: translate3d(25px, 0, 0);
384
+ }
385
+
386
+ 75% {
387
+ transform: translate3d(-10px, 0, 0);
388
+ }
389
+
390
+ 90% {
391
+ transform: translate3d(5px, 0, 0);
392
+ }
393
+
394
+ to {
395
+ transform: none;
396
+ }
397
+ }
398
+
399
+ .bounceInLeft {
400
+ animation-name: bounceInLeft;
401
+ }
402
+
403
+ @keyframes bounceInRight {
404
+ from, 60%, 75%, 90%, to {
405
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
406
+ }
407
+
408
+ from {
409
+ opacity: 0;
410
+ transform: translate3d(3000px, 0, 0);
411
+ }
412
+
413
+ 60% {
414
+ opacity: 1;
415
+ transform: translate3d(-25px, 0, 0);
416
+ }
417
+
418
+ 75% {
419
+ transform: translate3d(10px, 0, 0);
420
+ }
421
+
422
+ 90% {
423
+ transform: translate3d(-5px, 0, 0);
424
+ }
425
+
426
+ to {
427
+ transform: none;
428
+ }
429
+ }
430
+
431
+ .bounceInRight {
432
+ animation-name: bounceInRight;
433
+ }
434
+
435
+ @keyframes bounceInUp {
436
+ from, 60%, 75%, 90%, to {
437
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
438
+ }
439
+
440
+ from {
441
+ opacity: 0;
442
+ transform: translate3d(0, 3000px, 0);
443
+ }
444
+
445
+ 60% {
446
+ opacity: 1;
447
+ transform: translate3d(0, -20px, 0);
448
+ }
449
+
450
+ 75% {
451
+ transform: translate3d(0, 10px, 0);
452
+ }
453
+
454
+ 90% {
455
+ transform: translate3d(0, -5px, 0);
456
+ }
457
+
458
+ to {
459
+ transform: translate3d(0, 0, 0);
460
+ }
461
+ }
462
+
463
+ .bounceInUp {
464
+ animation-name: bounceInUp;
465
+ }
466
+
467
+ @keyframes bounceOut {
468
+ 20% {
469
+ transform: scale3d(.9, .9, .9);
470
+ }
471
+
472
+ 50%, 55% {
473
+ opacity: 1;
474
+ transform: scale3d(1.1, 1.1, 1.1);
475
+ }
476
+
477
+ to {
478
+ opacity: 0;
479
+ transform: scale3d(.3, .3, .3);
480
+ }
481
+ }
482
+
483
+ .bounceOut {
484
+ animation-name: bounceOut;
485
+ }
486
+
487
+ @keyframes bounceOutDown {
488
+ 20% {
489
+ transform: translate3d(0, 10px, 0);
490
+ }
491
+
492
+ 40%, 45% {
493
+ opacity: 1;
494
+ transform: translate3d(0, -20px, 0);
495
+ }
496
+
497
+ to {
498
+ opacity: 0;
499
+ transform: translate3d(0, 2000px, 0);
500
+ }
501
+ }
502
+
503
+ .bounceOutDown {
504
+ animation-name: bounceOutDown;
505
+ }
506
+
507
+ @keyframes bounceOutLeft {
508
+ 20% {
509
+ opacity: 1;
510
+ transform: translate3d(20px, 0, 0);
511
+ }
512
+
513
+ to {
514
+ opacity: 0;
515
+ transform: translate3d(-2000px, 0, 0);
516
+ }
517
+ }
518
+
519
+ .bounceOutLeft {
520
+ animation-name: bounceOutLeft;
521
+ }
522
+
523
+ @keyframes bounceOutRight {
524
+ 20% {
525
+ opacity: 1;
526
+ transform: translate3d(-20px, 0, 0);
527
+ }
528
+
529
+ to {
530
+ opacity: 0;
531
+ transform: translate3d(2000px, 0, 0);
532
+ }
533
+ }
534
+
535
+ .bounceOutRight {
536
+ animation-name: bounceOutRight;
537
+ }
538
+
539
+ @keyframes bounceOutUp {
540
+ 20% {
541
+ transform: translate3d(0, -10px, 0);
542
+ }
543
+
544
+ 40%, 45% {
545
+ opacity: 1;
546
+ transform: translate3d(0, 20px, 0);
547
+ }
548
+
549
+ to {
550
+ opacity: 0;
551
+ transform: translate3d(0, -2000px, 0);
552
+ }
553
+ }
554
+
555
+ .bounceOutUp {
556
+ animation-name: bounceOutUp;
557
+ }
558
+
559
+ @keyframes fadeIn {
560
+ from {
561
+ opacity: 0;
562
+ }
563
+
564
+ to {
565
+ opacity: 1;
566
+ }
567
+ }
568
+
569
+ .fadeIn {
570
+ animation-name: fadeIn;
571
+ }
572
+
573
+ @keyframes fadeInDown {
574
+ from {
575
+ opacity: 0;
576
+ transform: translate3d(0, -100%, 0);
577
+ }
578
+
579
+ to {
580
+ opacity: 1;
581
+ transform: none;
582
+ }
583
+ }
584
+
585
+ .fadeInDown {
586
+ animation-name: fadeInDown;
587
+ }
588
+
589
+ @keyframes fadeInDownBig {
590
+ from {
591
+ opacity: 0;
592
+ transform: translate3d(0, -2000px, 0);
593
+ }
594
+
595
+ to {
596
+ opacity: 1;
597
+ transform: none;
598
+ }
599
+ }
600
+
601
+ .fadeInDownBig {
602
+ animation-name: fadeInDownBig;
603
+ }
604
+
605
+ @keyframes fadeInLeft {
606
+ from {
607
+ opacity: 0;
608
+ transform: translate3d(-100%, 0, 0);
609
+ }
610
+
611
+ to {
612
+ opacity: 1;
613
+ transform: none;
614
+ }
615
+ }
616
+
617
+ .fadeInLeft {
618
+ animation-name: fadeInLeft;
619
+ }
620
+
621
+ @keyframes fadeInLeftBig {
622
+ from {
623
+ opacity: 0;
624
+ transform: translate3d(-2000px, 0, 0);
625
+ }
626
+
627
+ to {
628
+ opacity: 1;
629
+ transform: none;
630
+ }
631
+ }
632
+
633
+ .fadeInLeftBig {
634
+ animation-name: fadeInLeftBig;
635
+ }
636
+
637
+ @keyframes fadeInRight {
638
+ from {
639
+ opacity: 0;
640
+ transform: translate3d(100%, 0, 0);
641
+ }
642
+
643
+ to {
644
+ opacity: 1;
645
+ transform: none;
646
+ }
647
+ }
648
+
649
+ .fadeInRight {
650
+ animation-name: fadeInRight;
651
+ }
652
+
653
+ @keyframes fadeInRightBig {
654
+ from {
655
+ opacity: 0;
656
+ transform: translate3d(2000px, 0, 0);
657
+ }
658
+
659
+ to {
660
+ opacity: 1;
661
+ transform: none;
662
+ }
663
+ }
664
+
665
+ .fadeInRightBig {
666
+ animation-name: fadeInRightBig;
667
+ }
668
+
669
+ @keyframes fadeInUp {
670
+ from {
671
+ opacity: 0;
672
+ transform: translate3d(0, 100%, 0);
673
+ }
674
+
675
+ to {
676
+ opacity: 1;
677
+ transform: none;
678
+ }
679
+ }
680
+
681
+ .fadeInUp {
682
+ animation-name: fadeInUp;
683
+ }
684
+
685
+ @keyframes fadeInUpBig {
686
+ from {
687
+ opacity: 0;
688
+ transform: translate3d(0, 2000px, 0);
689
+ }
690
+
691
+ to {
692
+ opacity: 1;
693
+ transform: none;
694
+ }
695
+ }
696
+
697
+ .fadeInUpBig {
698
+ animation-name: fadeInUpBig;
699
+ }
700
+
701
+ @keyframes fadeOut {
702
+ from {
703
+ opacity: 1;
704
+ }
705
+
706
+ to {
707
+ opacity: 0;
708
+ }
709
+ }
710
+
711
+ .fadeOut {
712
+ animation-name: fadeOut;
713
+ }
714
+
715
+ @keyframes fadeOutDown {
716
+ from {
717
+ opacity: 1;
718
+ }
719
+
720
+ to {
721
+ opacity: 0;
722
+ transform: translate3d(0, 100%, 0);
723
+ }
724
+ }
725
+
726
+ .fadeOutDown {
727
+ animation-name: fadeOutDown;
728
+ }
729
+
730
+ @keyframes fadeOutDownBig {
731
+ from {
732
+ opacity: 1;
733
+ }
734
+
735
+ to {
736
+ opacity: 0;
737
+ transform: translate3d(0, 2000px, 0);
738
+ }
739
+ }
740
+
741
+ .fadeOutDownBig {
742
+ animation-name: fadeOutDownBig;
743
+ }
744
+
745
+ @keyframes fadeOutLeft {
746
+ from {
747
+ opacity: 1;
748
+ }
749
+
750
+ to {
751
+ opacity: 0;
752
+ transform: translate3d(-100%, 0, 0);
753
+ }
754
+ }
755
+
756
+ .fadeOutLeft {
757
+ animation-name: fadeOutLeft;
758
+ }
759
+
760
+ @keyframes fadeOutLeftBig {
761
+ from {
762
+ opacity: 1;
763
+ }
764
+
765
+ to {
766
+ opacity: 0;
767
+ transform: translate3d(-2000px, 0, 0);
768
+ }
769
+ }
770
+
771
+ .fadeOutLeftBig {
772
+ animation-name: fadeOutLeftBig;
773
+ }
774
+
775
+ @keyframes fadeOutRight {
776
+ from {
777
+ opacity: 1;
778
+ }
779
+
780
+ to {
781
+ opacity: 0;
782
+ transform: translate3d(100%, 0, 0);
783
+ }
784
+ }
785
+
786
+ .fadeOutRight {
787
+ animation-name: fadeOutRight;
788
+ }
789
+
790
+ @keyframes fadeOutRightBig {
791
+ from {
792
+ opacity: 1;
793
+ }
794
+
795
+ to {
796
+ opacity: 0;
797
+ transform: translate3d(2000px, 0, 0);
798
+ }
799
+ }
800
+
801
+ .fadeOutRightBig {
802
+ animation-name: fadeOutRightBig;
803
+ }
804
+
805
+ @keyframes fadeOutUp {
806
+ from {
807
+ opacity: 1;
808
+ }
809
+
810
+ to {
811
+ opacity: 0;
812
+ transform: translate3d(0, -100%, 0);
813
+ }
814
+ }
815
+
816
+ .fadeOutUp {
817
+ animation-name: fadeOutUp;
818
+ }
819
+
820
+ @keyframes fadeOutUpBig {
821
+ from {
822
+ opacity: 1;
823
+ }
824
+
825
+ to {
826
+ opacity: 0;
827
+ transform: translate3d(0, -2000px, 0);
828
+ }
829
+ }
830
+
831
+ .fadeOutUpBig {
832
+ animation-name: fadeOutUpBig;
833
+ }
834
+
835
+ @keyframes flip {
836
+ from {
837
+ transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
838
+ animation-timing-function: ease-out;
839
+ }
840
+
841
+ 40% {
842
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
843
+ animation-timing-function: ease-out;
844
+ }
845
+
846
+ 50% {
847
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
848
+ animation-timing-function: ease-in;
849
+ }
850
+
851
+ 80% {
852
+ transform: perspective(400px) scale3d(.95, .95, .95);
853
+ animation-timing-function: ease-in;
854
+ }
855
+
856
+ to {
857
+ transform: perspective(400px);
858
+ animation-timing-function: ease-in;
859
+ }
860
+ }
861
+
862
+ .animated.flip {
863
+ -webkit-backface-visibility: visible;
864
+ backface-visibility: visible;
865
+ animation-name: flip;
866
+ }
867
+
868
+ @keyframes flipInX {
869
+ from {
870
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
871
+ animation-timing-function: ease-in;
872
+ opacity: 0;
873
+ }
874
+
875
+ 40% {
876
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
877
+ animation-timing-function: ease-in;
878
+ }
879
+
880
+ 60% {
881
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
882
+ opacity: 1;
883
+ }
884
+
885
+ 80% {
886
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
887
+ }
888
+
889
+ to {
890
+ transform: perspective(400px);
891
+ }
892
+ }
893
+
894
+ .flipInX {
895
+ -webkit-backface-visibility: visible !important;
896
+ backface-visibility: visible !important;
897
+ animation-name: flipInX;
898
+ }
899
+
900
+ @keyframes flipInY {
901
+ from {
902
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
903
+ animation-timing-function: ease-in;
904
+ opacity: 0;
905
+ }
906
+
907
+ 40% {
908
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
909
+ animation-timing-function: ease-in;
910
+ }
911
+
912
+ 60% {
913
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
914
+ opacity: 1;
915
+ }
916
+
917
+ 80% {
918
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
919
+ }
920
+
921
+ to {
922
+ transform: perspective(400px);
923
+ }
924
+ }
925
+
926
+ .flipInY {
927
+ -webkit-backface-visibility: visible !important;
928
+ backface-visibility: visible !important;
929
+ animation-name: flipInY;
930
+ }
931
+
932
+ @keyframes flipOutX {
933
+ from {
934
+ transform: perspective(400px);
935
+ }
936
+
937
+ 30% {
938
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
939
+ opacity: 1;
940
+ }
941
+
942
+ to {
943
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
944
+ opacity: 0;
945
+ }
946
+ }
947
+
948
+ .flipOutX {
949
+ animation-name: flipOutX;
950
+ -webkit-backface-visibility: visible !important;
951
+ backface-visibility: visible !important;
952
+ }
953
+
954
+ @keyframes flipOutY {
955
+ from {
956
+ transform: perspective(400px);
957
+ }
958
+
959
+ 30% {
960
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
961
+ opacity: 1;
962
+ }
963
+
964
+ to {
965
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
966
+ opacity: 0;
967
+ }
968
+ }
969
+
970
+ .flipOutY {
971
+ -webkit-backface-visibility: visible !important;
972
+ backface-visibility: visible !important;
973
+ animation-name: flipOutY;
974
+ }
975
+
976
+ @keyframes lightSpeedIn {
977
+ from {
978
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
979
+ opacity: 0;
980
+ }
981
+
982
+ 60% {
983
+ transform: skewX(20deg);
984
+ opacity: 1;
985
+ }
986
+
987
+ 80% {
988
+ transform: skewX(-5deg);
989
+ opacity: 1;
990
+ }
991
+
992
+ to {
993
+ transform: none;
994
+ opacity: 1;
995
+ }
996
+ }
997
+
998
+ .lightSpeedIn {
999
+ animation-name: lightSpeedIn;
1000
+ animation-timing-function: ease-out;
1001
+ }
1002
+
1003
+ @keyframes lightSpeedOut {
1004
+ from {
1005
+ opacity: 1;
1006
+ }
1007
+
1008
+ to {
1009
+ transform: translate3d(100%, 0, 0) skewX(30deg);
1010
+ opacity: 0;
1011
+ }
1012
+ }
1013
+
1014
+ .lightSpeedOut {
1015
+ animation-name: lightSpeedOut;
1016
+ animation-timing-function: ease-in;
1017
+ }
1018
+
1019
+ @keyframes rotateIn {
1020
+ from {
1021
+ transform-origin: center;
1022
+ transform: rotate3d(0, 0, 1, -200deg);
1023
+ opacity: 0;
1024
+ }
1025
+
1026
+ to {
1027
+ transform-origin: center;
1028
+ transform: none;
1029
+ opacity: 1;
1030
+ }
1031
+ }
1032
+
1033
+ .rotateIn {
1034
+ animation-name: rotateIn;
1035
+ }
1036
+
1037
+ @keyframes rotateInDownLeft {
1038
+ from {
1039
+ transform-origin: left bottom;
1040
+ transform: rotate3d(0, 0, 1, -45deg);
1041
+ opacity: 0;
1042
+ }
1043
+
1044
+ to {
1045
+ transform-origin: left bottom;
1046
+ transform: none;
1047
+ opacity: 1;
1048
+ }
1049
+ }
1050
+
1051
+ .rotateInDownLeft {
1052
+ animation-name: rotateInDownLeft;
1053
+ }
1054
+
1055
+ @keyframes rotateInDownRight {
1056
+ from {
1057
+ transform-origin: right bottom;
1058
+ transform: rotate3d(0, 0, 1, 45deg);
1059
+ opacity: 0;
1060
+ }
1061
+
1062
+ to {
1063
+ transform-origin: right bottom;
1064
+ transform: none;
1065
+ opacity: 1;
1066
+ }
1067
+ }
1068
+
1069
+ .rotateInDownRight {
1070
+ animation-name: rotateInDownRight;
1071
+ }
1072
+
1073
+ @keyframes rotateInUpLeft {
1074
+ from {
1075
+ transform-origin: left bottom;
1076
+ transform: rotate3d(0, 0, 1, 45deg);
1077
+ opacity: 0;
1078
+ }
1079
+
1080
+ to {
1081
+ transform-origin: left bottom;
1082
+ transform: none;
1083
+ opacity: 1;
1084
+ }
1085
+ }
1086
+
1087
+ .rotateInUpLeft {
1088
+ animation-name: rotateInUpLeft;
1089
+ }
1090
+
1091
+ @keyframes rotateInUpRight {
1092
+ from {
1093
+ transform-origin: right bottom;
1094
+ transform: rotate3d(0, 0, 1, -90deg);
1095
+ opacity: 0;
1096
+ }
1097
+
1098
+ to {
1099
+ transform-origin: right bottom;
1100
+ transform: none;
1101
+ opacity: 1;
1102
+ }
1103
+ }
1104
+
1105
+ .rotateInUpRight {
1106
+ animation-name: rotateInUpRight;
1107
+ }
1108
+
1109
+ @keyframes rotateOut {
1110
+ from {
1111
+ transform-origin: center;
1112
+ opacity: 1;
1113
+ }
1114
+
1115
+ to {
1116
+ transform-origin: center;
1117
+ transform: rotate3d(0, 0, 1, 200deg);
1118
+ opacity: 0;
1119
+ }
1120
+ }
1121
+
1122
+ .rotateOut {
1123
+ animation-name: rotateOut;
1124
+ }
1125
+
1126
+ @keyframes rotateOutDownLeft {
1127
+ from {
1128
+ transform-origin: left bottom;
1129
+ opacity: 1;
1130
+ }
1131
+
1132
+ to {
1133
+ transform-origin: left bottom;
1134
+ transform: rotate3d(0, 0, 1, 45deg);
1135
+ opacity: 0;
1136
+ }
1137
+ }
1138
+
1139
+ .rotateOutDownLeft {
1140
+ animation-name: rotateOutDownLeft;
1141
+ }
1142
+
1143
+ @keyframes rotateOutDownRight {
1144
+ from {
1145
+ transform-origin: right bottom;
1146
+ opacity: 1;
1147
+ }
1148
+
1149
+ to {
1150
+ transform-origin: right bottom;
1151
+ transform: rotate3d(0, 0, 1, -45deg);
1152
+ opacity: 0;
1153
+ }
1154
+ }
1155
+
1156
+ .rotateOutDownRight {
1157
+ animation-name: rotateOutDownRight;
1158
+ }
1159
+
1160
+ @keyframes rotateOutUpLeft {
1161
+ from {
1162
+ transform-origin: left bottom;
1163
+ opacity: 1;
1164
+ }
1165
+
1166
+ to {
1167
+ transform-origin: left bottom;
1168
+ transform: rotate3d(0, 0, 1, -45deg);
1169
+ opacity: 0;
1170
+ }
1171
+ }
1172
+
1173
+ .rotateOutUpLeft {
1174
+ animation-name: rotateOutUpLeft;
1175
+ }
1176
+
1177
+ @keyframes rotateOutUpRight {
1178
+ from {
1179
+ transform-origin: right bottom;
1180
+ opacity: 1;
1181
+ }
1182
+
1183
+ to {
1184
+ transform-origin: right bottom;
1185
+ transform: rotate3d(0, 0, 1, 90deg);
1186
+ opacity: 0;
1187
+ }
1188
+ }
1189
+
1190
+ .rotateOutUpRight {
1191
+ animation-name: rotateOutUpRight;
1192
+ }
1193
+
1194
+ @keyframes hinge {
1195
+ 0% {
1196
+ transform-origin: top left;
1197
+ animation-timing-function: ease-in-out;
1198
+ }
1199
+
1200
+ 20%, 60% {
1201
+ transform: rotate3d(0, 0, 1, 80deg);
1202
+ transform-origin: top left;
1203
+ animation-timing-function: ease-in-out;
1204
+ }
1205
+
1206
+ 40%, 80% {
1207
+ transform: rotate3d(0, 0, 1, 60deg);
1208
+ transform-origin: top left;
1209
+ animation-timing-function: ease-in-out;
1210
+ opacity: 1;
1211
+ }
1212
+
1213
+ to {
1214
+ transform: translate3d(0, 700px, 0);
1215
+ opacity: 0;
1216
+ }
1217
+ }
1218
+
1219
+ .hinge {
1220
+ animation-name: hinge;
1221
+ }
1222
+
1223
+ @keyframes jackInTheBox {
1224
+ from {
1225
+ opacity: 0;
1226
+ transform: scale(0.1) rotate(30deg);
1227
+ transform-origin: center bottom;
1228
+ }
1229
+
1230
+ 50% {
1231
+ transform: rotate(-10deg);
1232
+ }
1233
+
1234
+ 70% {
1235
+ transform: rotate(3deg);
1236
+ }
1237
+
1238
+ to {
1239
+ opacity: 1;
1240
+ transform: scale(1);
1241
+ }
1242
+ }
1243
+
1244
+ .jackInTheBox {
1245
+ animation-name: jackInTheBox;
1246
+ }
1247
+
1248
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
1249
+
1250
+ @keyframes rollIn {
1251
+ from {
1252
+ opacity: 0;
1253
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
1254
+ }
1255
+
1256
+ to {
1257
+ opacity: 1;
1258
+ transform: none;
1259
+ }
1260
+ }
1261
+
1262
+ .rollIn {
1263
+ animation-name: rollIn;
1264
+ }
1265
+
1266
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
1267
+
1268
+ @keyframes rollOut {
1269
+ from {
1270
+ opacity: 1;
1271
+ }
1272
+
1273
+ to {
1274
+ opacity: 0;
1275
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
1276
+ }
1277
+ }
1278
+
1279
+ .rollOut {
1280
+ animation-name: rollOut;
1281
+ }
1282
+
1283
+ @keyframes zoomIn {
1284
+ from {
1285
+ opacity: 0;
1286
+ transform: scale3d(.3, .3, .3);
1287
+ }
1288
+
1289
+ 50% {
1290
+ opacity: 1;
1291
+ }
1292
+ }
1293
+
1294
+ .zoomIn {
1295
+ animation-name: zoomIn;
1296
+ }
1297
+
1298
+ @keyframes zoomInDown {
1299
+ from {
1300
+ opacity: 0;
1301
+ transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
1302
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1303
+ }
1304
+
1305
+ 60% {
1306
+ opacity: 1;
1307
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
1308
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1309
+ }
1310
+ }
1311
+
1312
+ .zoomInDown {
1313
+ animation-name: zoomInDown;
1314
+ }
1315
+
1316
+ @keyframes zoomInLeft {
1317
+ from {
1318
+ opacity: 0;
1319
+ transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
1320
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1321
+ }
1322
+
1323
+ 60% {
1324
+ opacity: 1;
1325
+ transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
1326
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1327
+ }
1328
+ }
1329
+
1330
+ .zoomInLeft {
1331
+ animation-name: zoomInLeft;
1332
+ }
1333
+
1334
+ @keyframes zoomInRight {
1335
+ from {
1336
+ opacity: 0;
1337
+ transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
1338
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1339
+ }
1340
+
1341
+ 60% {
1342
+ opacity: 1;
1343
+ transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
1344
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1345
+ }
1346
+ }
1347
+
1348
+ .zoomInRight {
1349
+ animation-name: zoomInRight;
1350
+ }
1351
+
1352
+ @keyframes zoomInUp {
1353
+ from {
1354
+ opacity: 0;
1355
+ transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
1356
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1357
+ }
1358
+
1359
+ 60% {
1360
+ opacity: 1;
1361
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
1362
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1363
+ }
1364
+ }
1365
+
1366
+ .zoomInUp {
1367
+ animation-name: zoomInUp;
1368
+ }
1369
+
1370
+ @keyframes zoomOut {
1371
+ from {
1372
+ opacity: 1;
1373
+ }
1374
+
1375
+ 50% {
1376
+ opacity: 0;
1377
+ transform: scale3d(.3, .3, .3);
1378
+ }
1379
+
1380
+ to {
1381
+ opacity: 0;
1382
+ }
1383
+ }
1384
+
1385
+ .zoomOut {
1386
+ animation-name: zoomOut;
1387
+ }
1388
+
1389
+ @keyframes zoomOutDown {
1390
+ 40% {
1391
+ opacity: 1;
1392
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
1393
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1394
+ }
1395
+
1396
+ to {
1397
+ opacity: 0;
1398
+ transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
1399
+ transform-origin: center bottom;
1400
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1401
+ }
1402
+ }
1403
+
1404
+ .zoomOutDown {
1405
+ animation-name: zoomOutDown;
1406
+ }
1407
+
1408
+ @keyframes zoomOutLeft {
1409
+ 40% {
1410
+ opacity: 1;
1411
+ transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
1412
+ }
1413
+
1414
+ to {
1415
+ opacity: 0;
1416
+ transform: scale(.1) translate3d(-2000px, 0, 0);
1417
+ transform-origin: left center;
1418
+ }
1419
+ }
1420
+
1421
+ .zoomOutLeft {
1422
+ animation-name: zoomOutLeft;
1423
+ }
1424
+
1425
+ @keyframes zoomOutRight {
1426
+ 40% {
1427
+ opacity: 1;
1428
+ transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
1429
+ }
1430
+
1431
+ to {
1432
+ opacity: 0;
1433
+ transform: scale(.1) translate3d(2000px, 0, 0);
1434
+ transform-origin: right center;
1435
+ }
1436
+ }
1437
+
1438
+ .zoomOutRight {
1439
+ animation-name: zoomOutRight;
1440
+ }
1441
+
1442
+ @keyframes zoomOutUp {
1443
+ 40% {
1444
+ opacity: 1;
1445
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
1446
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1447
+ }
1448
+
1449
+ to {
1450
+ opacity: 0;
1451
+ transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
1452
+ transform-origin: center bottom;
1453
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1454
+ }
1455
+ }
1456
+
1457
+ .zoomOutUp {
1458
+ animation-name: zoomOutUp;
1459
+ }
1460
+
1461
+ @keyframes slideInDown {
1462
+ from {
1463
+ transform: translate3d(0, -100%, 0);
1464
+ visibility: visible;
1465
+ }
1466
+
1467
+ to {
1468
+ transform: translate3d(0, 0, 0);
1469
+ }
1470
+ }
1471
+
1472
+ .slideInDown {
1473
+ animation-name: slideInDown;
1474
+ }
1475
+
1476
+ @keyframes slideInLeft {
1477
+ from {
1478
+ transform: translate3d(-100%, 0, 0);
1479
+ visibility: visible;
1480
+ }
1481
+
1482
+ to {
1483
+ transform: translate3d(0, 0, 0);
1484
+ }
1485
+ }
1486
+
1487
+ .slideInLeft {
1488
+ animation-name: slideInLeft;
1489
+ }
1490
+
1491
+ @keyframes slideInRight {
1492
+ from {
1493
+ transform: translate3d(100%, 0, 0);
1494
+ visibility: visible;
1495
+ }
1496
+
1497
+ to {
1498
+ transform: translate3d(0, 0, 0);
1499
+ }
1500
+ }
1501
+
1502
+ .slideInRight {
1503
+ animation-name: slideInRight;
1504
+ }
1505
+
1506
+ @keyframes slideInUp {
1507
+ from {
1508
+ transform: translate3d(0, 100%, 0);
1509
+ visibility: visible;
1510
+ }
1511
+
1512
+ to {
1513
+ transform: translate3d(0, 0, 0);
1514
+ }
1515
+ }
1516
+
1517
+ .slideInUp {
1518
+ animation-name: slideInUp;
1519
+ }
1520
+
1521
+ @keyframes slideOutDown {
1522
+ from {
1523
+ transform: translate3d(0, 0, 0);
1524
+ }
1525
+
1526
+ to {
1527
+ visibility: hidden;
1528
+ transform: translate3d(0, 100%, 0);
1529
+ }
1530
+ }
1531
+
1532
+ .slideOutDown {
1533
+ animation-name: slideOutDown;
1534
+ }
1535
+
1536
+ @keyframes slideOutLeft {
1537
+ from {
1538
+ transform: translate3d(0, 0, 0);
1539
+ }
1540
+
1541
+ to {
1542
+ visibility: hidden;
1543
+ transform: translate3d(-100%, 0, 0);
1544
+ }
1545
+ }
1546
+
1547
+ .slideOutLeft {
1548
+ animation-name: slideOutLeft;
1549
+ }
1550
+
1551
+ @keyframes slideOutRight {
1552
+ from {
1553
+ transform: translate3d(0, 0, 0);
1554
+ }
1555
+
1556
+ to {
1557
+ visibility: hidden;
1558
+ transform: translate3d(100%, 0, 0);
1559
+ }
1560
+ }
1561
+
1562
+ .slideOutRight {
1563
+ animation-name: slideOutRight;
1564
+ }
1565
+
1566
+ @keyframes slideOutUp {
1567
+ from {
1568
+ transform: translate3d(0, 0, 0);
1569
+ }
1570
+
1571
+ to {
1572
+ visibility: hidden;
1573
+ transform: translate3d(0, -100%, 0);
1574
+ }
1575
+ }
1576
+
1577
+ .slideOutUp {
1578
+ animation-name: slideOutUp;
1579
+ }
assets/css/elementor-preview-style.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /*
3
+ * In carousel preview iframe pabel edit overly displayed none
4
+ */
5
+ .premium-carousel-wrapper .elementor-element-overlay {
6
+ display: none;
7
+ }
8
+
9
+ #elementor-template-library-modal .elementor-button {
10
+ color: red;
11
+ }
assets/css/fonts/slick.eot ADDED
Binary file
assets/css/fonts/slick.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Generated by Fontastic.me</metadata>
5
+ <defs>
6
+ <font id="slick" horiz-adv-x="512">
7
+ <font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
8
+ <missing-glyph horiz-adv-x="512" />
9
+
10
+ <glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
11
+ <glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
12
+ <glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
13
+ <glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
14
+ </font></defs></svg>
assets/css/fonts/slick.ttf ADDED
Binary file
assets/css/fonts/slick.woff ADDED
Binary file
assets/css/premium-addons.css ADDED
@@ -0,0 +1,1497 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**************** Premium Banner ****************/
2
+ /************************************************/
3
+ .premium_addons-banner-ib,
4
+ .premium_addons-banner-ib img {
5
+ display: block;
6
+ position: relative;
7
+ }
8
+ .premium_addons-banner-ib {
9
+ z-index: 1;
10
+ overflow: hidden;
11
+ margin: 0 0 35px;
12
+ background: #3085a3;
13
+ text-align: center;
14
+ cursor: pointer;
15
+ -webkit-box-sizing: border-box;
16
+ -moz-box-sizing: border-box;
17
+ box-sizing: border-box;
18
+ }
19
+ .premium_addons-banner-ib,
20
+ .wpb_column>.wpb_wrapper .premium_addons-banner-ib {
21
+ margin-bottom: 0px
22
+ }
23
+ /*.premium_addons-banner-ib * {
24
+ -webkit-box-sizing: border-box;
25
+ -moz-box-sizing: border-box;
26
+ box-sizing: border-box;
27
+ }*/
28
+ .premium_addons-banner-ib *,
29
+ .premium_addons-banner-ib .premium_addons-banner-ib-desc {
30
+ -webkit-box-sizing: border-box;
31
+ -moz-box-sizing: border-box;
32
+ }
33
+ .premium_addons-banner-ib img {
34
+ min-width: 100%;
35
+ max-width: 100%;
36
+ -webkit-transition: opacity .35s;
37
+ transition: opacity .35s;
38
+ }
39
+ .premium_addons-banner-ib .premium_addons-banner-ib-desc {
40
+ padding: 15px;
41
+ -webkit-backface-visibility: hidden;
42
+ backface-visibility: hidden;
43
+ -webkit-box-sizing: border-box;
44
+ -moz-box-sizing: border-box;
45
+ box-sizing: border-box;
46
+ }
47
+ .premium_addons-banner-ib .premium_addons-banner-ib-desc,
48
+ .premium_addons-banner-ib a {
49
+ position: absolute;
50
+ top: 0;
51
+ left: 0;
52
+ width: 100%;
53
+ height: 100%;
54
+ }
55
+ .premium_addons-banner-ib a {
56
+ z-index: 1000;
57
+ text-indent: 200%;
58
+ white-space: nowrap;
59
+ font-size: 0;
60
+ opacity: 0;
61
+ }
62
+ .premium_addons-banner-ib a.premium_addons-banner-ib-link {
63
+ display: block;
64
+ background: 0 0;
65
+ }
66
+ .premium_banner_animation1 img {
67
+ width: -webkit-calc(100% + 50px)!important;
68
+ width: calc(100% + 50px)!important;
69
+ max-width: -webkit-calc(100% + 50px)!important;
70
+ max-width: calc(100% + 50px)!important;
71
+ -webkit-transition: opacity .35s, -webkit-transform .35s;
72
+ transition: opacity .35s, -webkit-transform .35s;
73
+ transition: opacity .35s, transform .35s;
74
+ transition: opacity .35s, transform .35s, -webkit-transform .35s;
75
+ -webkit-transform: translate3d(-40px, 0, 0);
76
+ transform: translate3d(-40px, 0, 0);
77
+ }
78
+ .premium_banner_animation1 .premium_addons-banner-ib-desc {
79
+ top: auto;
80
+ bottom: 0;
81
+ min-height: 25%;
82
+ height: auto;
83
+ max-height: 100%;
84
+ text-align: left;
85
+ }
86
+ .premium_banner_animation1 .premium_addons-banner-ib-content,
87
+ .premium_banner_animation1 .premium_addons-banner-ib-title {
88
+ -webkit-transform: translate3d(0, 40px, 0);
89
+ transform: translate3d(0, 40px, 0);
90
+ -webkit-transition-delay: .05s;
91
+ transition-delay: .05s;
92
+ -webkit-transition-duration: .35s;
93
+ transition-duration: .35s;
94
+ }
95
+ .premium_banner_animation1 .premium_addons-banner-ib-title {
96
+ -webkit-transition: -webkit-transform .35s;
97
+ transition: -webkit-transform .35s;
98
+ transition: transform .35s;
99
+ transition: transform .35s, -webkit-transform .35s;
100
+ }
101
+ .premium_banner_animation1 .premium_addons-banner-ib-content {
102
+ margin-top: 10px;
103
+ opacity: 0;
104
+ -webkit-transition: opacity .2s, -webkit-transform .35s;
105
+ transition: opacity .2s, -webkit-transform .35s;
106
+ transition: opacity .2s, transform .35s;
107
+ transition: opacity .2s, transform .35s, -webkit-transform .35s;
108
+ }
109
+ .premium_banner_animation1:hover .premium_addons-banner-ib-content {
110
+ opacity: 1;
111
+ -webkit-transition-delay: .05s;
112
+ transition-delay: .05s;
113
+ -webkit-transition-duration: .35s;
114
+ transition-duration: .35s;
115
+ }
116
+ .premium_banner_animation1:hover .premium_addons-banner-ib-content,
117
+ .premium_banner_animation1:hover .premium_addons-banner-ib-title,
118
+ .premium_banner_animation1:hover img {
119
+ -webkit-transform: translate3d(0, 0, 0);
120
+ transform: translate3d(0, 0, 0);
121
+ -webkit-transition-delay: .05s;
122
+ transition-delay: .05s;
123
+ -webkit-transition-duration: .35s;
124
+ transition-duration: .35s;
125
+ }
126
+ .premium_banner_animation1.premium-banner-min-height img,
127
+ .premium_banner_animation2.premium-banner-min-height img,
128
+ .premium_banner_animation4.premium-banner-min-height img,
129
+ .premium_banner_animation5.premium-banner-min-height img,
130
+ .premium_banner_animation6.premium-banner-min-height img,
131
+ .premium_banner_animation13.premium-banner-min-height img {
132
+ height: auto;
133
+ }
134
+
135
+ .premium_banner_animation2 img {
136
+ width: 100%;
137
+ }
138
+
139
+ .premium_banner_animation2 .premium_addons-banner-ib-desc::before {
140
+ position: absolute;
141
+ content: "";
142
+ top: 0;
143
+ left: 0;
144
+ width: 100%;
145
+ height: 100%;
146
+ opacity: 0;
147
+ -webkit-transform: translate3d(0, 50%, 0);
148
+ transform: translate3d(0, 50%, 0);
149
+ }
150
+ .premium_banner_animation2 .premium_addons-banner-ib-title {
151
+ position: absolute;
152
+ top: 50%;
153
+ left: 0;
154
+ width: 100%;
155
+ -webkit-transition: -webkit-transform .35s, color .35s;
156
+ -webkit-transition: color .35s, -webkit-transform .35s;
157
+ transition: color .35s, -webkit-transform .35s;
158
+ transition: transform .35s, color .35s;
159
+ transition: transform .35s, color .35s, -webkit-transform .35s;
160
+ -webkit-transform: translate3d(0, -50%, 0);
161
+ transform: translate3d(0, -50%, 0);
162
+ }
163
+ .premium_banner_animation2 .premium_addons-banner-ib-content,
164
+ .premium_banner_animation2 .premium_addons-banner-ib-desc::before {
165
+ -webkit-transition: opacity .35s, -webkit-transform .35s;
166
+ transition: opacity .35s, -webkit-transform .35s;
167
+ transition: opacity .35s, transform .35s;
168
+ transition: opacity .35s, transform .35s, -webkit-transform .35s;
169
+ }
170
+ .premium_banner_animation2 .premium_addons-banner-ib-content {
171
+ position: absolute;
172
+ bottom: 0;
173
+ left: 0;
174
+ padding: 15px;
175
+ width: 100%;
176
+ max-height: 50%;
177
+ opacity: 0;
178
+ -webkit-transform: translate3d(0, 10px, 0);
179
+ transform: translate3d(0, 10px, 0);
180
+ }
181
+ .premium_banner_animation2:hover .premium_addons-banner-ib-title {
182
+ color: #fff;
183
+ -webkit-transform: translate3d(0, -40px, 0);
184
+ transform: translate3d(0, -40px, 0);
185
+ }
186
+ .premium_banner_animation2:hover .premium_addons-banner-ib-content,
187
+ .premium_banner_animation2:hover .premium_addons-banner-ib-desc::before {
188
+ opacity: 1;
189
+ -webkit-transform: translate3d(0, 0, 0);
190
+ transform: translate3d(0, 0, 0);;
191
+ }
192
+
193
+ .premium_banner_animation3 .premium_addons-banner-ib-title {
194
+ position: absolute;
195
+ bottom: 0;
196
+ left: 0;
197
+ padding: 15px;
198
+ width: 100%;
199
+ text-align: left;
200
+ -webkit-transform: translate3d(0, -30px, 0);
201
+ transform: translate3d(0, -30px, 0);
202
+ }
203
+ .premium_banner_animation3 .premium_addons-banner-ib-desc::before,
204
+ .premium_banner_animation3 .premium_addons-banner-ib-title {
205
+ -webkit-transition: -webkit-transform .35s;
206
+ transition: -webkit-transform .35s;
207
+ transition: transform .35s;
208
+ transition: transform .35s, -webkit-transform .35s;
209
+ }
210
+ .premium_banner_animation3:hover .premium_addons-banner-ib-desc::before,
211
+ .premium_banner_animation3:hover .premium_addons-banner-ib-title {
212
+ opacity: 1;
213
+ -webkit-transform: translate3d(0, 0, 0);
214
+ transform: translate3d(0, 0, 0);
215
+ }
216
+ .premium_banner_animation3 .premium_addons-banner-ib-content {
217
+ max-height: -webkit-calc(100% - 60px - 1.5em);
218
+ max-height: calc(100% - 60px - 1.5em);
219
+ overflow: hidden;
220
+ }
221
+ .premium_banner_animation4 img {
222
+ width: -webkit-calc(100% + 40px)!important;
223
+ width: calc(100% + 40px)!important;
224
+ max-width: -webkit-calc(100% + 40px)!important;
225
+ max-width: calc(100% + 40px)!important;
226
+ }
227
+ .premium_banner_animation4 .premium_addons-banner-ib-desc {
228
+ padding: 30px;
229
+ }
230
+ .premium_banner_animation4 .premium_addons-banner-ib-desc::after,
231
+ .premium_banner_animation4 .premium_addons-banner-ib-desc::before {
232
+ position: absolute;
233
+ content: "";
234
+ opacity: 0;
235
+ }
236
+ .premium_banner_animation4 .premium_addons-banner-ib-desc::before {
237
+ top: 50px;
238
+ right: 30px;
239
+ bottom: 50px;
240
+ left: 30px;
241
+ border-top: 1px solid #fff;
242
+ border-bottom: 1px solid #fff;
243
+ -webkit-transform: scale(0, 1);
244
+ -ms-transform: scale(0, 1);
245
+ transform: scale(0, 1);
246
+ -webkit-transform-origin: 0 0;
247
+ -ms-transform-origin: 0 0;
248
+ transform-origin: 0 0;
249
+ }
250
+ .premium_banner_animation4 .premium_addons-banner-ib-desc::after {
251
+ top: 30px;
252
+ right: 50px;
253
+ bottom: 30px;
254
+ left: 50px;
255
+ border-right: 1px solid #fff;
256
+ border-left: 1px solid #fff;
257
+ -webkit-transform: scale(1, 0);
258
+ -ms-transform: scale(1, 0);
259
+ transform: scale(1, 0);
260
+ -webkit-transform-origin: 100% 0;
261
+ -ms-transform-origin: 100% 0;
262
+ transform-origin: 100% 0;
263
+ }
264
+ .premium_banner_animation4 .premium_addons-banner-ib-title {
265
+ padding-top: 50px;
266
+ -webkit-transition: -webkit-transform .35s;
267
+ transition: -webkit-transform .35s;
268
+ transition: transform .35s;
269
+ transition: transform .35s, -webkit-transform .35s;
270
+ }
271
+ .premium_banner_animation4 .premium_addons-banner-ib-content {
272
+ padding: 10px 30px;
273
+ opacity: 0;
274
+ overflow: hidden;
275
+ -webkit-transform: translate3d(0, -10px, 0);
276
+ transform: translate3d(0, -10px, 0);
277
+ }
278
+ .premium_banner_animation4 .premium_addons-banner-ib-title,
279
+ .premium_banner_animation4 img {
280
+ -webkit-transform: translate3d(-30px, 0, 0);
281
+ transform: translate3d(-30px, 0, 0);
282
+ }
283
+ .premium_banner_animation4 .premium_addons-banner-ib-content,
284
+ .premium_banner_animation4 .premium_addons-banner-ib-desc::after,
285
+ .premium_banner_animation4 .premium_addons-banner-ib-desc::before,
286
+ .premium_banner_animation4 img {
287
+ -webkit-transition: opacity .35s, -webkit-transform .35s;
288
+ transition: opacity .35s, -webkit-transform .35s;
289
+ transition: opacity .35s, transform .35s;
290
+ transition: opacity .35s, transform .35s, -webkit-transform .35s;
291
+ }
292
+
293
+ .premium_banner_animation4:hover img {
294
+ -webkit-transform: translate3d(0, 0, 0);
295
+ transform: translate3d(0, 0, 0);
296
+ }
297
+ .premium_banner_animation4:hover .premium_addons-banner-ib-desc::after,
298
+ .premium_banner_animation4:hover .premium_addons-banner-ib-desc::before {
299
+ opacity: 1;
300
+ -webkit-transform: scale(1);
301
+ -ms-transform: scale(1);
302
+ transform: scale(1);
303
+ }
304
+ .premium_banner_animation4:hover .premium_addons-banner-ib-content,
305
+ .premium_banner_animation4:hover .premium_addons-banner-ib-title {
306
+ opacity: 1;
307
+ -webkit-transform: translate3d(0, 0, 0);
308
+ transform: translate3d(0, 0, 0);
309
+ }
310
+ .premium_banner_animation4:hover .premium_addons-banner-ib-content,
311
+ .premium_banner_animation4:hover .premium_addons-banner-ib-desc::after,
312
+ .premium_banner_animation4:hover .premium_addons-banner-ib-title,
313
+ .premium_banner_animation4:hover img {
314
+ -webkit-transition-delay: .15s;
315
+ transition-delay: .15s;
316
+ }
317
+ .premium_banner_animation5 .premium_addons-banner-ib-desc {
318
+ top: auto;
319
+ bottom: 0;
320
+ padding: 15px;
321
+ height: auto;
322
+ background: #f2f2f2;
323
+ color: #3c4a50;
324
+ -webkit-transition: -webkit-transform .35s;
325
+ transition: -webkit-transform .35s;
326
+ transition: transform .35s;
327
+ transition: transform .35s, -webkit-transform .35s;
328
+ -webkit-transform: translate3d(0, 100%, 0);
329
+ transform: translate3d(0, 100%, 0);
330
+ }
331
+ .premium_banner_animation5 .premium_addons-banner-ib-content {
332
+ position: absolute;
333
+ top: auto;
334
+ bottom: 100%;
335
+ left: 0;
336
+ width: 100%;
337
+ padding: 25px;
338
+ opacity: 0;
339
+ -webkit-transition: opacity .35s;
340
+ transition: opacity .35s;
341
+ }
342
+ .premium_banner_animation5 .premium_addons-banner-ib-title {
343
+ -webkit-transition: -webkit-transform .35s;
344
+ transition: -webkit-transform .35s;
345
+ transition: transform .35s;
346
+ transition: transform .35s, -webkit-transform .35s;
347
+ -webkit-transform: translate3d(0, 200%, 0);
348
+ transform: translate3d(0, 200%, 0);
349
+ text-align: center;
350
+ }
351
+ .premium_banner_animation5:hover .premium_addons-banner-ib-content,
352
+ .premium_banner_animation5:hover .premium_addons-banner-ib-content * {
353
+ opacity: 1!important;
354
+ z-index: 99!important;
355
+ -webkit-backface-visibility: hidden!important;
356
+ backface-visibility: hidden!important;
357
+ }
358
+ .premium_banner_animation5:hover .premium_addons-banner-ib-desc,
359
+ .premium_banner_animation5:hover .premium_addons-banner-ib-title {
360
+ -webkit-transform: translateY(0);
361
+ -ms-transform: translateY(0);
362
+ transform: translateY(0);
363
+ }
364
+ .premium_banner_animation5:hover .premium_addons-banner-ib-title {
365
+ -webkit-transition-delay: .05s;
366
+ transition-delay: .05s;
367
+ }
368
+ .premium_banner_animation6 .premium_addons-banner-ib-desc {
369
+ padding: 45px;
370
+ }
371
+ .premium_banner_animation6 .premium_addons-banner-ib-desc::before {
372
+ position: absolute;
373
+ content: "";
374
+ top: 30px;
375
+ right: 30px;
376
+ bottom: 30px;
377
+ left: 30px;
378
+ border: 1px solid #fff;
379
+ }
380
+ .premium_banner_animation6 .premium_addons-banner-ib-title {
381
+ margin: 20px 0 10px;
382
+ -webkit-transition: -webkit-transform .35s;
383
+ transition: -webkit-transform .35s;
384
+ transition: transform .35s;
385
+ transition: transform .35s, -webkit-transform .35s;
386
+ -webkit-transform: translate3d(0, 100%, 0);
387
+ transform: translate3d(0, 100%, 0);
388
+ }
389
+ .premium_banner_animation6 .premium_addons-banner-ib-content,
390
+ .premium_banner_animation6 .premium_addons-banner-ib-desc::before {
391
+ opacity: 0;
392
+ -webkit-transition: opacity .35s, -webkit-transform .35s;
393
+ transition: opacity .35s, -webkit-transform .35s;
394
+ transition: opacity .35s, transform .35s;
395
+ transition: opacity .35s, transform .35s, -webkit-transform .35s;
396
+ -webkit-transform: scale(0);
397
+ -ms-transform: scale(0);
398
+ transform: scale(0);
399
+ }
400
+ .premium_banner_animation6:hover .premium_addons-banner-ib-title {
401
+ -webkit-transform: translate3d(0, 0, 0);
402
+ transform: translate3d(0, 0, 0);
403
+ }
404
+ .premium_banner_animation6:hover .premium_addons-banner-ib-content,
405
+ .premium_banner_animation6:hover .premium_addons-banner-ib-desc::before {
406
+ opacity: 1;
407
+ -webkit-transform: scale(1);
408
+ -ms-transform: scale(1);
409
+ transform: scale(1);
410
+ }
411
+
412
+
413
+
414
+ .premium_banner_animation8 img {
415
+ -webkit-transition: opacity .35s, -webkit-transform .35s;
416
+ transition: opacity .35s, -webkit-transform .35s;
417
+ transition: opacity .35s, transform .35s;
418
+ transition: opacity .35s, transform .35s, -webkit-transform .35s;
419
+ -webkit-transform: scale(1.15);
420
+ -ms-transform: scale(1.15);
421
+ transform: scale(1.15)
422
+ }
423
+ .premium_banner_animation8:hover img {
424
+ -webkit-transform: scale(1);
425
+ -ms-transform: scale(1);
426
+ transform: scale(1);
427
+ }
428
+ .premium_banner_animation8 .premium_addons-banner-ib-title {
429
+ margin-top: 20%;
430
+ -webkit-transition: -webkit-transform .35s;
431
+ transition: -webkit-transform .35s;
432
+ transition: transform .35s;
433
+ transition: transform .35s, -webkit-transform .35s;
434
+ -webkit-transform: translate3d(0, 20px, 0);
435
+ transform: translate3d(0, 20px, 0);
436
+ }
437
+ .premium_banner_animation8:hover .premium_addons-banner-ib-title {
438
+ -webkit-transform: translate3d(0, 0, 0);
439
+ transform: translate3d(0, 0, 0);
440
+ }
441
+ .premium_banner_animation8 .premium_addons-banner-ib-content {
442
+ margin: 1em 0 0;
443
+ padding: 35px;
444
+ border: 1px solid #fff;
445
+ opacity: 0;
446
+ -webkit-transition: opacity .35s, -webkit-transform .35s;
447
+ transition: opacity .35s, -webkit-transform .35s;
448
+ transition: opacity .35s, transform .35s;
449
+ transition: opacity .35s, transform .35s, -webkit-transform .35s;
450
+ -webkit-transform: translate3d(0, 20px, 0) scale(1.1);
451
+ transform: translate3d(0, 20px, 0) scale(1.1);
452
+ }
453
+ .premium_banner_animation8:hover .premium_addons-banner-ib-content {
454
+ opacity: 1;
455
+ -webkit-transform: translate3d(0, 0, 0) scale(1);
456
+ transform: translate3d(0, 0, 0) scale(1);
457
+ }
458
+
459
+ .premium_banner_animation12 .premium_addons-banner-ib-desc::after {
460
+ position: absolute;
461
+ content: "";
462
+ right: 30px;
463
+ bottom: 30px;
464
+ left: 30px;
465
+ height: -webkit-calc(50% - 30px);
466
+ height: calc(50% - 30px);
467
+ border: 7px solid #fff;
468
+ -webkit-transition: -webkit-transform .35s;
469
+ transition: -webkit-transform .35s;
470
+ transition: transform .35s;
471
+ transition: transform .35s, -webkit-transform .35s;
472
+ -webkit-transform: translate3d(0, -100%, 0);
473
+ transform: translate3d(0, -100%, 0);
474
+ }
475
+ .premium_banner_animation12:hover .premium_addons-banner-ib-desc::after {
476
+ -webkit-transform: translate3d(0, 0, 0);
477
+ transform: translate3d(0, 0, 0);
478
+ }
479
+ .premium_banner_animation12 .premium_addons-banner-ib-desc {
480
+ padding: 45px;
481
+ text-align: left;
482
+ }
483
+ .premium_banner_animation12 .premium_addons-banner-ib-content {
484
+ position: absolute;
485
+ right: 60px;
486
+ bottom: 60px;
487
+ left: 60px;
488
+ opacity: 0;
489
+ -webkit-transition: opacity .35s, -webkit-transform .35s;
490
+ transition: opacity .35s, -webkit-transform .35s;
491
+ transition: opacity .35s, transform .35s;
492
+ transition: opacity .35s, transform .35s, -webkit-transform .35s;
493
+ -webkit-transform: translate3d(0, -100px, 0);
494
+ transform: translate3d(0, -100px, 0);
495
+ }
496
+ .premium_banner_animation12:hover .premium_addons-banner-ib-content {
497
+ opacity: 1;
498
+ -webkit-transform: translate3d(0, 0, 0);
499
+ transform: translate3d(0, 0, 0);
500
+ }
501
+ .premium_banner_animation13 img {
502
+ width: -webkit-calc(100% + 20px)!important;
503
+ width: calc(100% + 20px)!important;
504
+ max-width: -webkit-calc(100% + 20px)!important;
505
+ max-width: calc(100% + 20px)!important;
506
+ -webkit-transition: opacity .35s, -webkit-transform .35s;
507
+ transition: opacity .35s, -webkit-transform .35s;
508
+ transition: opacity .35s, transform .35s;
509
+ transition: opacity .35s, transform .35s, -webkit-transform .35s;
510
+ -webkit-transform: translate3d(-10px, 0, 0);
511
+ transform: translate3d(-10px, 0, 0);
512
+ -webkit-backface-visibility: hidden;
513
+ backface-visibility: hidden;
514
+ }
515
+ .premium_banner_animation13:hover img {
516
+ -webkit-transform: translate3d(0, 0, 0);
517
+ transform: translate3d(0, 0, 0);
518
+ }
519
+ .premium_banner_animation13 .premium_addons-banner-ib-desc {
520
+ text-align: left;
521
+ }
522
+ .premium_banner_animation13 .premium_addons-banner-ib-title {
523
+ position: relative;
524
+ overflow: hidden;
525
+ padding: 5px 0 10px;
526
+ }
527
+ .premium_banner_animation13 .premium_addons-banner-ib-title::after {
528
+ position: absolute;
529
+ content: "";
530
+ bottom: 0;
531
+ left: 0;
532
+ width: 100%;
533
+ height: 2px;
534
+ background: #fff;
535
+ -webkit-transition: -webkit-transform .35s;
536
+ transition: -webkit-transform .35s;
537
+ transition: transform .35s;
538
+ transition: transform .35s, -webkit-transform .35s;
539
+ -webkit-transform: translate3d(-101%, 0, 0);
540
+ transform: translate3d(-101%, 0, 0);
541
+ }
542
+ .premium_banner_animation13:hover .premium_addons-banner-ib-title::after {
543
+ -webkit-transform: translate3d(0, 0, 0);
544
+ transform: translate3d(0, 0, 0);
545
+ }
546
+ .premium_banner_animation13 .premium_addons-banner-ib-content {
547
+ padding: 15px 0;
548
+ opacity: 0;
549
+ -webkit-transition: opacity .35s, -webkit-transform .35s;
550
+ transition: opacity .35s, -webkit-transform .35s;
551
+ transition: opacity .35s, transform .35s;
552
+ transition: opacity .35s, transform .35s, -webkit-transform .35s;
553
+ -webkit-transform: translate3d(100%, 0, 0);
554
+ transform: translate3d(100%, 0, 0);
555
+ }
556
+ .premium_banner_animation13:hover .premium_addons-banner-ib-content {
557
+ opacity: 1;
558
+ -webkit-transform: translate3d(0, 0, 0);
559
+ transform: translate3d(0, 0, 0);
560
+ }
561
+ .premium_addons-banner-ib.premium_banner_animation5 .premium-banner-toggle-size {
562
+ left: 50%;
563
+ width: auto!important;
564
+ height: 100%;
565
+ max-width: none;
566
+ -webkit-transform: translateX(-50%);
567
+ -ms-transform: translateX(-50%);
568
+ transform: translateX(-50%);
569
+ }
570
+ .premium_addons-banner-ib img {
571
+ border: none;
572
+ padding: 0;
573
+ margin: 0;
574
+ }
575
+ /**************** Premium CountDown *************/
576
+ /************************************************/
577
+ /* jQuery Countdown styles 2.0.0. */
578
+ .pre_countdown-row {
579
+ display: block;
580
+ text-align: center;
581
+ }
582
+
583
+ .countdown .pre_countdown-section {
584
+ display: inline-block;
585
+ max-width: 100%;
586
+ margin-bottom: 15px;
587
+ }
588
+
589
+ .countdown .pre_countdown-section:last-child {
590
+ margin-right: 0;
591
+ }
592
+
593
+ .countdown span.pre_countdown-amount {
594
+ font-size: 36px;
595
+ }
596
+
597
+ .countdown .pre_time-mid {
598
+ display: block;
599
+ }
600
+ /********************************
601
+ * Border styles
602
+ *********************************/
603
+ .solid .pre_countdown-section .pre_countdown-amount {
604
+ border-style: solid;
605
+ }
606
+
607
+ .dashed .pre_countdown-section .pre_countdown-amount {
608
+ border-style: dashed;
609
+ }
610
+
611
+ .dotted .pre_countdown-section .pre_countdown-amount {
612
+ border-style: dotted;
613
+ }
614
+
615
+ .double .pre_countdown-section .pre_countdown-amount {
616
+ border-style: double;
617
+ }
618
+
619
+ .inset .pre_countdown-section .pre_countdown-amount {
620
+ border-style: inset;
621
+ }
622
+
623
+ .outset .pre_countdown-section .pre_countdown-amount {
624
+ border-style: outset;
625
+ }
626
+ /************************************
627
+ * Digit and unit styles
628
+ *************************************/
629
+ .side .pre_countdown-section .pre_countdown-period {
630
+ vertical-align: bottom;
631
+ }
632
+ /************************************
633
+ * Digit and unit side by side
634
+ *************************************/
635
+
636
+ .side .pre_countdown-section .pre_countdown-amount,
637
+ .side .pre_countdown-section .pre_countdown-period {
638
+ display: inline-block;
639
+ }
640
+
641
+ .side .pre_countdown-section .pre_countdown-amount {
642
+ margin-right: 5px;
643
+ }
644
+ /************************************
645
+ * Digit and unit up and down
646
+ *************************************/
647
+ .down .pre_countdown-section .pre_countdown-amount,
648
+ .down .pre_countdown-section .pre_countdown-period {
649
+ display: block;
650
+ }
651
+ /**************** Premium Carousel **************/
652
+ /************************************************/
653
+ .premium-carousel-wrapper a.carousel-arrow,
654
+ .premium-carousel-wrapper a.ver-carousel-arrow {
655
+ display: inline-block !important;
656
+ width: 2em;
657
+ height: 2em;
658
+ line-height: 1.84em;
659
+ text-align: center;
660
+ position: absolute;
661
+ cursor: pointer;
662
+ box-sizing: content-box;
663
+ -webkit-transition: opacity .3s ease;
664
+ -o-transition: opacity .3s ease;
665
+ -moz-transition: opacity .3s ease;
666
+ transition: opacity .3s ease;
667
+ -webkit-appearance: inherit;
668
+ box-shadow: none;
669
+ }
670
+ .premium-carousel-wrapper a.slick-arrow:hover {
671
+ box-shadow: none !important;
672
+ }
673
+ .premium-carousel-wrapper a.carousel-arrow {
674
+ top: 50%;
675
+ }
676
+ .premium-carousel-wrapper a.ver-carousel-arrow {
677
+ left: 50%;
678
+ }
679
+ a.carousel-arrow.carousel-next {
680
+ right: -45px;
681
+ }
682
+
683
+ a.carousel-arrow.carousel-prev {
684
+ left: -45px;
685
+ }
686
+
687
+ a.ver-carousel-arrow.carousel-next {
688
+ bottom: -56px;
689
+ }
690
+
691
+ a.ver-carousel-arrow.carousel-prev {
692
+ top: -45px;
693
+ }
694
+ a.circle-bg {
695
+ border-radius: 100%;
696
+ }
697
+ a.circle-border {
698
+ border-radius: 100%;
699
+ border: solid black;
700
+ }
701
+ a.square-border {
702
+ border: solid black;
703
+ }
704
+ ul.slick-dots li {
705
+ font-size: 10px;
706
+ }
707
+ a.carousel-arrow.carousel-next i:before,
708
+ a.carousel-arrow.carousel-prev i:before {
709
+ line-height: inherit;
710
+ vertical-align: middle;
711
+ }
712
+ a.ver-carousel-arrow.carousel-next i:before {
713
+ line-height: inherit;
714
+ vertical-align: middle;
715
+ }
716
+ a.ver-carousel-arrow.carousel-prev.circle-bg i:before,
717
+ a.ver-carousel-arrow.carousel-prev.circle-border i:before {
718
+ line-height: inherit;
719
+ vertical-align: middle;
720
+ }
721
+ /**************** Premium Counter ***************/
722
+ /************************************************/
723
+ .counter-area {
724
+ padding: 10px 0;
725
+ }
726
+ .counter-area .counter-icon span.icon {
727
+ width: 1em;
728
+ height: 1em;
729
+ line-height: 1em;
730
+ text-align: center;
731
+ display: inline-block;
732
+ vertical-align: middle;
733
+ }
734
+ .counter-area .counter-title {
735
+ padding: 0;
736
+ margin: 0;
737
+ }
738
+ .counter-icon .icon i.fa:before {
739
+ vertical-align: text-top;
740
+ }
741
+ /*
742
+ * Circle Icon style
743
+ */
744
+ .counter-area .counter-icon .circle {
745
+ border-radius: 100%;
746
+ }
747
+ .counter-icon .design.solid {
748
+ border-style: solid;
749
+ }
750
+ .counter-icon .design.dotted {
751
+ border-style: dotted;
752
+ }
753
+ .counter-icon .design.dashed {
754
+ border-style: dashed;
755
+ }
756
+ .counter-icon .design.double {
757
+ border-style: double;
758
+ }
759
+ .counter-icon .design.inset{
760
+ border-style: inset;
761
+ }
762
+ .counter-icon .design.outset {
763
+ border-style: outset;
764
+ }
765
+ .counter-area.center {
766
+ text-align: center;
767
+ }
768
+ .counter-area .right,
769
+ .counter-area .left {
770
+ display: table-cell;
771
+ vertical-align: middle;
772
+ }
773
+ .counter-icon.right {
774
+ padding-left: 20px;
775
+ }
776
+ .counter-icon.left {
777
+ padding-right: 20px;
778
+ }
779
+ .init-wrapper.right {
780
+ text-align: right;
781
+ }
782
+ /*
783
+ * Custom image and simple styles image fix
784
+ */
785
+ span.icon.flex-width {
786
+ width: auto !important;
787
+ height: auto !important;
788
+ }
789
+ /**************** Premium Image Separator ****************/
790
+ /*********************************************************/
791
+ /*Image Separator Container Style*/
792
+ .premium-image-separator-container{
793
+ position: absolute;
794
+ width: 100%;
795
+ z-index: 99;
796
+ top: auto;
797
+ text-align: center;
798
+ }
799
+ /*Link on Image Style*/
800
+ .premium-image-separator-link{
801
+ position: absolute;
802
+ z-index: 9999;
803
+ top: 0;
804
+ left: 0;
805
+ width: 100%;
806
+ height: 100%;
807
+ text-decoration: none;
808
+ }
809
+ /*Important to override Theme options*/
810
+ a.premium-image-separator-link:hover,
811
+ a.premium-image-separator-link:visited,
812
+ a.premium-image-separator-link:focus,
813
+ a.premium-image-separator-link:active{
814
+ box-shadow: none !important;
815
+ outline: none !important;
816
+ border: none !important;
817
+ text-decoration: none !important;
818
+ }
819
+ /**************** Premium Modal Box ****************/
820
+ /***************************************************/
821
+ .premium-modal-box-container {
822
+ width: 100% !important;
823
+ }
824
+ /*Open Modal Button Style*/
825
+ .premium-modal-box-selector-container .btn-info {
826
+ border: none;
827
+ -webkit-transition: all 0.3s ease-in-out;
828
+ -moz-transition: all 0.3s ease-in-out;
829
+ -o-transition: all 0.3s ease-in-out;
830
+ -ms-transition: all 0.3s ease-in-out;
831
+ transition: all 0.3s ease-in-out;
832
+ }
833
+ /*Open Modal Img, Span Style */
834
+ .premium-modal-box-selector-container img,
835
+ .premium-modal-box-selector-container span{
836
+ cursor: pointer;
837
+ }
838
+ /*Image on Modal Header Style*/
839
+ .premium-modal-box-modal-header img {
840
+ width: 48px;
841
+ padding: 5px 0;
842
+ vertical-align: top;
843
+ }
844
+ /*Icon On Modal Header Style*/
845
+ .premium-modal-box-modal-header i {
846
+ padding-right: 6px;
847
+ }
848
+ /*Image On Modal Header Style*/
849
+ .premium-modal-box-modal-title img {
850
+ vertical-align : middle;
851
+ }
852
+ /*Close Button Container Style*/
853
+ .premium-modal-box-close-button-container {
854
+ float: right;
855
+ padding: 10px;
856
+ }
857
+ /**************** Premium Progress Bar ****************/
858
+ /******************************************************/
859
+ .clearfix {
860
+ clear: both;
861
+ }
862
+ /*Progress Bar Style*/
863
+ .premium-progressbar-progress-bar {
864
+ -webkit-transition: width 0s ease-in-out !important;
865
+ -moz-transition: width 0s ease-in-out !important;
866
+ -ms-transition: width 0s ease-in-out !important;
867
+ -o-transition: width 0s ease-in-out !important;
868
+ transition: width 0s ease-in-out !important;
869
+ }
870
+ /*Left Label Style*/
871
+ .premium-progressbar-container p:first-of-type{
872
+ margin:0;
873
+ float:left;
874
+ }
875
+ /*Right Label Style*/
876
+ .premium-progressbar-container p:nth-of-type(2){
877
+ margin: 0;
878
+ float: right;
879
+ }
880
+ /**************** Premium Testimonials ****************/
881
+ /******************************************************/
882
+ /*Testimonial Container Style*/
883
+ .premium-testimonial-Box {
884
+ width: 100%;
885
+ background: transparent;
886
+ overflow: hidden;
887
+ -webkit-transition: all 0.3s ease-in-out;
888
+ -moz-transition: all 0.3s ease-in-out;
889
+ -o-transition: all 0.3s ease-in-out;
890
+ -ms-transition: all 0.3s ease-in-out;
891
+ transition: all 0.3s ease-in-out;
892
+ }
893
+ /*Testimonial Title Style*/
894
+ .premium-testimonial-Box h1, .premium-testimonial-Box h2,
895
+ .premium-testimonial-Box h3, .premium-testimonial-Box h4,
896
+ .premium-testimonial-Box h5, .premium-testimonial-Box h6{
897
+ display: inline;
898
+ font-weight: 600;
899
+ }
900
+ /*Testimonial Text Style*/
901
+ .premium-testimonial-container {
902
+ position: relative;
903
+ }
904
+ /*Testimonial Img Container Style*/
905
+ .premium-testimonial-img-wrapper {
906
+ margin-left: auto;
907
+ margin-right: auto;
908
+ overflow: hidden;
909
+ }
910
+ /*Testimonial Person Image Style*/
911
+ .premium-testimonial-person-image {
912
+ width: 100%;
913
+ height: 100% !important;
914
+ border-style: solid !important;
915
+ }
916
+ /*Testimonial Content Wrapper Style*/
917
+ .premium-testimonial-content-wrapper {
918
+ position: relative;
919
+ z-index: 2;
920
+ width: 100%;
921
+ padding: 20px;
922
+ text-align: center;
923
+ }
924
+ /*Testimonial Quotes Container Div Style*/
925
+ .premium-testimonial-quotes-wrapper {
926
+ z-index: 1;
927
+ }
928
+ /*Clear Float*/
929
+ .premium-testimonial-clear-float {
930
+ clear: both;
931
+ }
932
+ /*Upper Quote Style*/
933
+ .premium-testimonial-upper-quote {
934
+ position: absolute;
935
+ z-index: 1;
936
+ }
937
+ /*Lower Quote Style*/
938
+ .premium-testimonial-lower-quote{
939
+ position:absolute;
940
+ z-index: 1;
941
+ }
942
+ /*Author Info Container Div Style*/
943
+ .premium-testimonial-author-info {
944
+ display: block;
945
+ }
946
+ /**************** Premium Title ****************/
947
+ /***********************************************/
948
+ /*Title Container Div Style*/
949
+ .premium-title-container {
950
+ position: relative;
951
+ width: 100%;
952
+ clear: both;
953
+ overflow: hidden;
954
+ }
955
+ /*Header Style*/
956
+ .premium-title-header {
957
+ margin: 0;
958
+ padding: 10px;
959
+ }
960
+ /*Style 2,3,6,7,8 Header*/
961
+ .premium-title-style1,
962
+ .premium-title-style2,
963
+ .premium-title-style5,
964
+ .premium-title-style6,
965
+ .premium-title-style7{
966
+ display: inline-block;
967
+ float: none;
968
+ }
969
+ /*Style 6 Header*/
970
+ .premium-title-style6{
971
+ position: relative;
972
+ }
973
+ /*Style 6 Trinagle*/
974
+ .premium-title-style6:before {
975
+ position: absolute;
976
+ left: 50%;
977
+ bottom: 0;
978
+ margin-left: -2px;
979
+ content: '';
980
+ border: 3px solid transparent;
981
+ }
982
+ /*Style 7 Strip Container*/
983
+ .premium-title-style7-strip{
984
+ display: block;
985
+ margin: 0;
986
+ float: none;
987
+ clear: both;
988
+ }
989
+ /*Strip Style*/
990
+ .premium-title-style7-strip:before{
991
+ display: block;
992
+ position: relative;
993
+ margin-left: auto;
994
+ margin-right: auto;
995
+ content: '';
996
+ float: none;
997
+ }
998
+ /**************** Premium Video Box ****************/
999
+ /***************************************************/
1000
+ /*Image Container Div Style*/
1001
+ .premium-video-box-image-container {
1002
+ position: relative;
1003
+ cursor: pointer;
1004
+ }
1005
+ /*Image Style*/
1006
+ .premium-video-box-image-container img {
1007
+ width: 100%;
1008
+ }
1009
+ /*Play Icon Container Div Style*/
1010
+ .premium-video-box-play-icon-container {
1011
+ position: absolute;
1012
+ z-index: 1;
1013
+ top: 50%;
1014
+ left: 50%;
1015
+ cursor: pointer;
1016
+ transform: translate(-50%,-50%);
1017
+ }
1018
+ .premium-video-box-description-container {
1019
+ position: absolute;
1020
+ z-index: 1;
1021
+ left: 50%;
1022
+ width: 100%;
1023
+ text-align: center;
1024
+ cursor: pointer;
1025
+ transform: translate(-50%,-50%);
1026
+ }
1027
+ /*Play Icon Style*/
1028
+ .premium-video-box-play-icon{
1029
+ padding: 15px;
1030
+ transform: translateX(4%);
1031
+ -webkit-transition: all 0.3s ease-in-out;
1032
+ -moz-transition: all 0.3s ease-in-out;
1033
+ -o-transition: all 0.3s ease-in-out;
1034
+ -ms-transition: all 0.3s ease-in-out;
1035
+ transition: all 0.3s ease-in-out;
1036
+ }
1037
+ /*Video Container Div Style*/
1038
+ .premium-video-box-video-container{
1039
+ position: absolute;
1040
+ top: 0;
1041
+ left: 0;
1042
+ z-index: 2;
1043
+ width: 100%;
1044
+ height: 100%;
1045
+ opacity:0;
1046
+ visibility: hidden;
1047
+ -webkit-transition: opacity 0.8s ease-in-out;
1048
+ -moz-transition: opacity 0.8s ease-in-out;
1049
+ -o-transition: opacity 0.8s ease-in-out;
1050
+ -ms-transition: opacity 0.8s ease-in-out;
1051
+ transition: opacity 0.8s ease-in-out;
1052
+ }
1053
+ /*Video Iframe Style*/
1054
+ .premium-video-box-video-container iframe{
1055
+ width: 100%;
1056
+ height: 100%;
1057
+ }
1058
+ /**************** Premium Blog *****************/
1059
+ /***********************************************/
1060
+ .premium-blog-thumb-effect-wrapper {
1061
+ position: relative;
1062
+ overflow: hidden;
1063
+ }
1064
+ .premium-blog-thumbnail-container {
1065
+ overflow: hidden;
1066
+ }
1067
+ /*Thumbnail Img*/
1068
+ .premium-blog-thumbnail-container img,
1069
+ .premium-blog-thumbnail-container .below-entry-meta{
1070
+ width: 100%;
1071
+ height: 100%;
1072
+ margin: 0 !important;
1073
+ transform: scale(1.2);
1074
+ -webkit-transition: all 0.4s ease-in-out;
1075
+ -moz-transition: all 0.4s ease-in-out;
1076
+ -ms-transition: all 0.4s ease-in-out;
1077
+ -o-transition: all 0.4s ease-in-out;
1078
+ transition: all 0.4s ease-in-out;
1079
+ }
1080
+ /*Thumbnail Container Hover*/
1081
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-zoomin-effect img {
1082
+ transform: scale(1.3);
1083
+ }
1084
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-zoomout-effect img {
1085
+ transform: scale(1.1);
1086
+ }
1087
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-scale-effect img {
1088
+ transform: scale(1.3) rotate(5deg);
1089
+ }
1090
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-gray-effect img {
1091
+ filter: grayscale(100%);
1092
+ }
1093
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-blur-effect img {
1094
+ filter: blur(3px);
1095
+ }
1096
+ .premium-blog-thumbnail-container:before, .premium-blog-thumbnail-container:after {
1097
+ position: absolute;
1098
+ content: '';
1099
+ z-index: 1;
1100
+ top: 50%;
1101
+ left: 50%;
1102
+ opacity: 0;
1103
+ -webkit-transform: translate(-50%,-50%);
1104
+ transform: translate(-50%,-50%);
1105
+ -webkit-transition: all 0.4s linear 0s;
1106
+ -moz-transition: all 0.4s linear 0s;
1107
+ -ms-transition: all 0.4s linear 0s;
1108
+ -o-transition: all 0.4s linear 0s;
1109
+ transition: all 0.4s linear 0s;
1110
+ height: 1px;
1111
+ width: 100%;
1112
+ }
1113
+ .premium-blog-thumbnail-container:before {
1114
+ width: 1px;
1115
+ height: 100%;
1116
+ }
1117
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-thumbnail-container:after {
1118
+ width: 20px;
1119
+ opacity: 1;
1120
+ }
1121
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-thumbnail-container:before{
1122
+ height: 20px;
1123
+ opacity: 1;
1124
+ }
1125
+ .premium-blog-diagonal-container {
1126
+ position: absolute;
1127
+ top: 0;
1128
+ left: 0;
1129
+ width: 100%;
1130
+ height: 100%;
1131
+ }
1132
+ .premium-blog-diagonal-effect:before {
1133
+ position: absolute;
1134
+ top: 0px;
1135
+ left: 0px;
1136
+ width: 100%;
1137
+ height: 100%;
1138
+ content: " ";
1139
+ z-index: 1;
1140
+ background: rgba(255,255,255,0.2);
1141
+ -webkit-transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,-150%,0);
1142
+ -moz-transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,-150%,0);
1143
+ -o-transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,-150%,0);
1144
+ -ms-transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,-150%,0);
1145
+ transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,-150%,0);
1146
+ -webkit-transition: all 0.3s linear 0s;
1147
+ -moz-transition: all 0.3s linear 0s;
1148
+ -o-transition: all 0.3s linear 0s;
1149
+ -ms-transition: all 0.3s linear 0s;
1150
+ transition: all 0.3s linear 0s;
1151
+ }
1152
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-diagonal-effect:before {
1153
+ -webkit-transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,150%,0);
1154
+ -moz-transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,150%,0);
1155
+ -o-transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,150%,0);
1156
+ -ms-transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,150%,0);
1157
+ transform: scale3d(1.9,1.4,1) rotate3d(0,0,1,45deg) translate3d(0,150%,0);
1158
+ }
1159
+ .premium-blog-framed-effect {
1160
+ position: absolute;
1161
+ width: calc(100% - 30px);
1162
+ height: calc(100% - 30px);
1163
+ top: 15px;
1164
+ left: 15px;
1165
+ opacity: 0;
1166
+ transform: scale(0.3);
1167
+ -webkit-transition: all 0.3s linear 0s;
1168
+ -moz-transition: all 0.3s linear 0s;
1169
+ -o-transition: all 0.3s linear 0s;
1170
+ -ms-transition: all 0.3s linear 0s;
1171
+ transition: all 0.3s linear 0s;
1172
+ }
1173
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-framed-effect {
1174
+ opacity: 0.99;
1175
+ transform: scale(1);
1176
+ }
1177
+ .premium-blog-bordered-effect {
1178
+ position: absolute;
1179
+ top: 0;
1180
+ left: 0;
1181
+ width: 100%;
1182
+ height: 100%;
1183
+ opacity: 0;
1184
+ padding: 15px;
1185
+ -webkit-transition: all 0.3s linear 0s;
1186
+ -moz-transition: all 0.3s linear 0s;
1187
+ -o-transition: all 0.3s linear 0s;
1188
+ -ms-transition: all 0.3s linear 0s;
1189
+ transition: all 0.3s linear 0s;
1190
+ }
1191
+ .premium-blog-bordered-border-container {
1192
+ width: 100%;
1193
+ height: 100%;
1194
+ border: 2px solid;
1195
+ -webkit-transform: scale(0,1);
1196
+ transform: scale(0,1);
1197
+ -webkit-transform-origin: 0 0;
1198
+ transform-origin: 0 0;
1199
+ -webkit-transition: all 0.3s linear 0s;
1200
+ -moz-transition: all 0.3s linear 0s;
1201
+ -o-transition: all 0.3s linear 0s;
1202
+ -ms-transition: all 0.3s linear 0s;
1203
+ transition: all 0.3s linear 0s;
1204
+ }
1205
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-bordered-effect {
1206
+ opacity: 0.99;
1207
+ }
1208
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-bordered-effect .premium-blog-bordered-border-container {
1209
+ -webkit-transform: scale(1,1);
1210
+ transform: scale(1,1);
1211
+ }
1212
+ .premium-blog-squares-effect,
1213
+ .premium-blog-squares-square-container{
1214
+ position: absolute;
1215
+ top: 0;
1216
+ left: 0;
1217
+ width: 100%;
1218
+ height: 100%;
1219
+ }
1220
+ .premium-blog-squares-effect:before,
1221
+ .premium-blog-squares-effect:after,
1222
+ .premium-blog-squares-square-container:before,
1223
+ .premium-blog-squares-square-container:after{
1224
+ position: absolute;
1225
+ content: '';
1226
+ top: 0;
1227
+ left: 0;
1228
+ width: 50%;
1229
+ height: 50%;
1230
+ -webkit-transform: translate(-100%,-100%);
1231
+ transform: translate(-100%,-100%);
1232
+ opacity: 0.99;
1233
+ -webkit-transition: all 0.3s linear 0s;
1234
+ -moz-transition: all 0.3s linear 0s;
1235
+ -o-transition: all 0.3s linear 0s;
1236
+ -ms-transition: all 0.3s linear 0s;
1237
+ transition: all 0.3s linear 0s;
1238
+ }
1239
+ .premium-blog-squares-effect:after {
1240
+ -webkit-transform: translate(200%,200%);
1241
+ transform: translate(200%,200%);
1242
+ }
1243
+ .premium-blog-squares-square-container:before{
1244
+ opacity: 0.99;
1245
+ -webkit-transform: translate(-100%,200%);
1246
+ transform: translate(-100%,200%);
1247
+ }
1248
+ .premium-blog-squares-square-container:after {
1249
+ opacity: 0.99;
1250
+ -webkit-transform: translate(200%,-100%);
1251
+ transform: translate(200%,-100%);
1252
+ }
1253
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-squares-effect:before {
1254
+ -webkit-transform: translate(0,0.8%);
1255
+ transform: translate(0,0.8%);
1256
+ }
1257
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-squares-effect:after {
1258
+ -webkit-transform: translate(100%,100%);
1259
+ transform: translate(100%,100%);
1260
+ }
1261
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-squares-square-container:before{
1262
+ -webkit-transform: translate(0,100%);
1263
+ transform: translate(0,100%);
1264
+ }
1265
+ .premium-blog-thumb-effect-wrapper:hover .premium-blog-squares-square-container:after{
1266
+ -webkit-transform: translate(100%,0.8%);
1267
+ transform: translate(100%,0.8%);
1268
+ }
1269
+ /*Content Wrapper*/
1270
+ .premium-blog-content-wrapper {
1271
+ position: relative;
1272
+ z-index: 2;
1273
+ top: -50px;
1274
+ margin: 0px 30px 20px;
1275
+ clear: both;
1276
+ padding: 30px;
1277
+ background: #ddd;
1278
+ }
1279
+ /*Post Format Container*/
1280
+ .premium-blog-format-container {
1281
+ float: left;
1282
+ background: #eee;
1283
+ width: 55px;
1284
+ height: 55px;
1285
+ font-size: 25px;
1286
+ margin-right: 20px;
1287
+ text-align: center;
1288
+ -webkit-transition: all 0.3s ease-in-out;
1289
+ -moz-transition: all 0.3s ease-in-out;
1290
+ -ms-transition: all 0.3s ease-in-out;
1291
+ -o-transition: all 0.3s ease-in-out;
1292
+ transition: all 0.3s ease-in-out;
1293
+ }
1294
+ /*Post Format Icon*/
1295
+ .premium-blog-format-container i {
1296
+ vertical-align: bottom;
1297
+ }
1298
+ .premium-blog-entry-title {
1299
+ display: inline;
1300
+ margin-bottom: 0px;
1301
+ }
1302
+ .premium-blog-entry-meta {
1303
+ margin-bottom: 8px;
1304
+ }
1305
+ .premium-blog-entry-meta i{
1306
+ margin-right: 3px;
1307
+ }
1308
+ /*Post Meta Data Container*/
1309
+ .premium-blog-meta-data {
1310
+ margin-right : 8px;
1311
+ }
1312
+ /*Post Content Container*/
1313
+ .premium-blog-post-content {
1314
+ border-top: 1px solid;
1315
+ padding-top: 14px;
1316
+ }
1317
+ .premium-blog-entry-meta,
1318
+ .premium-blog-post-content {
1319
+ margin-top: 0;
1320
+ margin-left: 75px;
1321
+ }
1322
+ .premium-blog-post-tags-container {
1323
+ margin-top: 8px;
1324
+ margin-left: 75px;
1325
+ }
1326
+ .premium-blog-entry-title a,
1327
+ .premium-blog-meta-data a,
1328
+ .premium-blog-post-tags a{
1329
+ -webkit-transition: color 0.3s ease-in-out;
1330
+ -moz-transition: color 0.3s ease-in-out;
1331
+ -ms-transition: color 0.3s ease-in-out;
1332
+ -o-transition: color 0.3s ease-in-out;
1333
+ transition: color 0.3s ease-in-out;
1334
+ }
1335
+ .premium-blog-pagination-container {
1336
+ margin-top: -30px;
1337
+ text-align: right;
1338
+ }
1339
+ .premium-blog-pagination-container ul {
1340
+ list-style: none;
1341
+ margin: 0;
1342
+ padding: 0;
1343
+ }
1344
+ .premium-blog-pagination-container li {
1345
+ display: inline;
1346
+ }
1347
+ .premium-blog-pagination-container li a,
1348
+ .premium-blog-pagination-container li span{
1349
+ display: inline;
1350
+ margin-right: 10px;
1351
+ margin-bottom: 5px;
1352
+ padding: 3px 7px;
1353
+ border: 1px solid #E3E3E3;
1354
+ font-size: 16px;
1355
+ line-height: 20px;
1356
+ }
1357
+ .premium-blog-pagination-container li .prev,
1358
+ .premium-blog-pagination-container li .next {
1359
+ border: none;
1360
+ }
1361
+ /**************** Premium Person ******************/
1362
+ /**************************************************/
1363
+ .premium-person-container {
1364
+ position: relative;
1365
+ overflow: hidden;
1366
+ }
1367
+ .premium-person-image-container {
1368
+ text-align: center;
1369
+ }
1370
+ .premium-person-zoomin-effect:hover .premium-person-image-container img{
1371
+ -webkit-transform: scale(1.3);
1372
+ -moz-transform: scale(1.3);
1373
+ -ms-transform: scale(1.3);
1374
+ -o-transform: scale(1.3);
1375
+ transform: scale(1.3);
1376
+ }
1377
+ .premium-person-zoomout-effect:hover .premium-person-image-container img{
1378
+ -webkit-transform: scale(1.1);
1379
+ -moz-transform: scale(1.1);
1380
+ -ms-transform: scale(1.1);
1381
+ -o-transform: scale(1.1);
1382
+ transform: scale(1.1);
1383
+ }
1384
+ .premium-person-scale-effect:hover .premium-person-image-container img {
1385
+ -webkit-transform: scale(1.3) rotate(5deg);
1386
+ -moz-transform: scale(1.3) rotate(5deg);
1387
+ -ms-transform: scale(1.3) rotate(5deg);
1388
+ -o-transform: scale(1.3) rotate(5deg);
1389
+ transform: scale(1.3) rotate(5deg);
1390
+
1391
+ }
1392
+ .premium-person-grayscale-effect:hover .premium-person-image-container img {
1393
+ -webkit-filter: grayscale(100%);
1394
+ -moz-filter: grayscale(100%);
1395
+ -ms-filter: grayscale(100%);
1396
+ -o-filter: grayscale(100%);
1397
+ filter: grayscale(100%);
1398
+ }
1399
+ .premium-person-blur-effect:hover .premium-person-image-container img {
1400
+ -webkit-filter: blur(3px);
1401
+ -moz-filter: blur(3px);
1402
+ -ms-filter: blur(3px);
1403
+ -o-filter: blur(3px);
1404
+ filter: blur(3px);
1405
+ }
1406
+ .premium-person-container .premium-person-image-container img {
1407
+ width: 100%;
1408
+ height: 100%;
1409
+ -webkit-transition: all 0.5s ease-in-out;
1410
+ -moz-transition: all 0.5s ease-in-out;
1411
+ -ms-transition: all 0.5s ease-in-out;
1412
+ -o-transition: all 0.5s ease-in-out;
1413
+ transition: all 0.5s ease-in-out;
1414
+ transform: scale(1.2);
1415
+ }
1416
+ .premium-person-info {
1417
+ position: absolute;
1418
+ top: auto;
1419
+ right: 0;
1420
+ left: 0;
1421
+ width: 100%;
1422
+ -webkit-transition: all 500ms ease 0s;
1423
+ -moz-transition: all 500ms ease 0s;
1424
+ -ms-transition: all 500ms ease 0s;
1425
+ -o-transition: all 500ms ease 0s;
1426
+ transition: all 500ms ease 0s;
1427
+ -webkit-transform: translate3d(0,100%,0);
1428
+ -moz-transform: translate3d(0,100%,0);
1429
+ -ms-transform: translate3d(0,100%,0);
1430
+ -o-transform: translate3d(0,100%,0);
1431
+ transform: translate3d(0,100%,0);
1432
+ }
1433
+ .premium-person-container:hover .premium-person-info{
1434
+ -webkit-transform: translate3d(0,0,0);
1435
+ -moz-transform: translate3d(0,0,0);
1436
+ -ms-transform: translate3d(0,0,0);
1437
+ -o-transform: translate3d(0,0,0);
1438
+ transform: translate3d(0,0,0);
1439
+ bottom: -1px !important;
1440
+ }
1441
+ .premium-person-info-container {
1442
+ padding: 30px 15px;
1443
+ }
1444
+ .premium-person-name {
1445
+ margin: 0 0 5px;
1446
+ font-weight: 700;
1447
+ }
1448
+ .premium-person-title {
1449
+ margin: 0 0 20px;
1450
+ padding: 0;
1451
+ }
1452
+ .premium-person-content {
1453
+ margin: 0 0 30px;
1454
+ }
1455
+ /*Override Theme List Margin*/
1456
+ .premium-person-social-list {
1457
+ margin: 0px !important;
1458
+ }
1459
+ .premium-person-social-list .premium-person-list-item {
1460
+ display: inline;
1461
+ list-style: none;
1462
+ }
1463
+ .premium-person-social-list li,
1464
+ .premium-person-social-list li i{
1465
+ position: relative;
1466
+ bottom: 0px;
1467
+ -webkit-transition: all 0.2s ease-in-out;
1468
+ -moz-transition: all 0.2s ease-in-out;
1469
+ -ms-transition: all 0.2x ease-in-out;
1470
+ -o-transition: all 0.2s ease-in-out;
1471
+ transition: all 0.2s ease-in-out;
1472
+ }
1473
+ .premium-person-social-list li:hover {
1474
+ bottom: 5px;
1475
+ }
1476
+ .premium-person-social-list li:hover a{
1477
+ box-shadow: none;
1478
+ }
1479
+ .premium-person-social-list li a:focus{
1480
+ box-shadow: none;
1481
+ outline: none;
1482
+ }
1483
+ .premium-person-social-list li i {
1484
+ font-size: 18px;
1485
+ margin: 0 5px;
1486
+ }
1487
+ /**************** Premium Dual Header ******************/
1488
+ /*******************************************************/
1489
+ .premium-dual-header-container .premium-dual-header-first-header,
1490
+ .premium-dual-header-container .premium-dual-header-second-header {
1491
+ display: inline;
1492
+ }
1493
+ .premium-dual-header-first-clip,
1494
+ .premium-dual-header-second-clip {
1495
+ -webkit-text-fill-color: transparent;
1496
+ -webkit-background-clip: text;
1497
+ }
assets/css/slick-theme.css ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset 'UTF-8';
2
+ /* Slider */
3
+ .slick-loading .slick-list
4
+ {
5
+ background: #fff url('./ajax-loader.gif') center center no-repeat;
6
+ }
7
+
8
+ /* Icons */
9
+ @font-face
10
+ {
11
+ font-family: 'slick';
12
+ font-weight: normal;
13
+ font-style: normal;
14
+
15
+ src: url('./fonts/slick.eot');
16
+ src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
17
+ }
18
+ /* Arrows */
19
+ .slick-prev,
20
+ .slick-next
21
+ {
22
+ font-size: 0;
23
+ line-height: 0;
24
+
25
+ position: absolute;
26
+ top: 50%;
27
+
28
+ display: block;
29
+
30
+ width: 20px;
31
+ height: 20px;
32
+ padding: 0;
33
+ -webkit-transform: translate(0, -50%);
34
+ -ms-transform: translate(0, -50%);
35
+ transform: translate(0, -50%);
36
+
37
+ cursor: pointer;
38
+
39
+ color: transparent;
40
+ border: none;
41
+ outline: none;
42
+ background: transparent;
43
+ }
44
+ .slick-prev:hover,
45
+ .slick-prev:focus,
46
+ .slick-next:hover,
47
+ .slick-next:focus
48
+ {
49
+ color: transparent;
50
+ outline: none;
51
+ background: transparent;
52
+ }
53
+ .slick-prev:hover:before,
54
+ .slick-prev:focus:before,
55
+ .slick-next:hover:before,
56
+ .slick-next:focus:before
57
+ {
58
+ opacity: 1;
59
+ }
60
+ .slick-prev.slick-disabled:before,
61
+ .slick-next.slick-disabled:before
62
+ {
63
+ opacity: .25;
64
+ }
65
+
66
+ .slick-prev:before,
67
+ .slick-next:before
68
+ {
69
+ font-family: 'slick';
70
+ font-size: 20px;
71
+ line-height: 1;
72
+
73
+ opacity: .75;
74
+ color: white;
75
+
76
+ -webkit-font-smoothing: antialiased;
77
+ -moz-osx-font-smoothing: grayscale;
78
+ }
79
+
80
+ .slick-prev
81
+ {
82
+ left: -25px;
83
+ }
84
+ [dir='rtl'] .slick-prev
85
+ {
86
+ right: -25px;
87
+ left: auto;
88
+ }
89
+ .slick-prev:before
90
+ {
91
+ content: '←';
92
+ }
93
+ [dir='rtl'] .slick-prev:before
94
+ {
95
+ content: '→';
96
+ }
97
+
98
+ .slick-next
99
+ {
100
+ right: -25px;
101
+ }
102
+ [dir='rtl'] .slick-next
103
+ {
104
+ right: auto;
105
+ left: -25px;
106
+ }
107
+ .slick-next:before
108
+ {
109
+ content: '→';
110
+ }
111
+ [dir='rtl'] .slick-next:before
112
+ {
113
+ content: '←';
114
+ }
115
+
116
+ /* Dots */
117
+ .slick-dotted.slick-slider
118
+ {
119
+ margin-bottom: 30px;
120
+ }
121
+
122
+ .slick-dots
123
+ {
124
+ position: absolute;
125
+ bottom: -25px;
126
+
127
+ display: block;
128
+
129
+ width: 100%;
130
+ padding: 0;
131
+ margin: 0;
132
+
133
+ list-style: none;
134
+
135
+ text-align: center;
136
+ }
137
+ .slick-dots li
138
+ {
139
+ position: relative;
140
+
141
+ display: inline-block;
142
+
143
+ width: 20px;
144
+ height: 20px;
145
+ margin: 0 5px;
146
+ padding: 0;
147
+
148
+ cursor: pointer;
149
+ }
150
+ .slick-dots li button
151
+ {
152
+ font-size: 0;
153
+ line-height: 0;
154
+
155
+ display: block;
156
+
157
+ width: 20px;
158
+ height: 20px;
159
+ padding: 5px;
160
+
161
+ cursor: pointer;
162
+
163
+ color: transparent;
164
+ border: 0;
165
+ outline: none;
166
+ background: transparent;
167
+ }
168
+ .slick-dots li button:hover,
169
+ .slick-dots li button:focus
170
+ {
171
+ outline: none;
172
+ }
173
+ .slick-dots li button:hover:before,
174
+ .slick-dots li button:focus:before
175
+ {
176
+ opacity: 1;
177
+ }
178
+ .slick-dots li button:before
179
+ {
180
+ font-family: 'slick';
181
+ font-size: 6px;
182
+ line-height: 20px;
183
+
184
+ position: absolute;
185
+ top: 0;
186
+ left: 0;
187
+
188
+ width: 20px;
189
+ height: 20px;
190
+
191
+ content: '•';
192
+ text-align: center;
193
+
194
+ opacity: .25;
195
+ color: black;
196
+
197
+ -webkit-font-smoothing: antialiased;
198
+ -moz-osx-font-smoothing: grayscale;
199
+ }
200
+ .slick-dots li.slick-active button:before
201
+ {
202
+ opacity: .75;
203
+ color: black;
204
+ }
assets/css/slick.css ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Slider */
2
+ .slick-slider
3
+ {
4
+ position: relative;
5
+
6
+ display: block;
7
+ box-sizing: border-box;
8
+
9
+ -webkit-user-select: none;
10
+ -moz-user-select: none;
11
+ -ms-user-select: none;
12
+ user-select: none;
13
+
14
+ -webkit-touch-callout: none;
15
+ -khtml-user-select: none;
16
+ -ms-touch-action: pan-y;
17
+ touch-action: pan-y;
18
+ -webkit-tap-highlight-color: transparent;
19
+ }
20
+
21
+ .slick-list
22
+ {
23
+ position: relative;
24
+
25
+ display: block;
26
+ overflow: hidden;
27
+
28
+ margin: 0;
29
+ padding: 0;
30
+ }
31
+ .slick-list:focus
32
+ {
33
+ outline: none;
34
+ }
35
+ .slick-list.dragging
36
+ {
37
+ cursor: pointer;
38
+ cursor: hand;
39
+ }
40
+
41
+ .slick-slider .slick-track,
42
+ .slick-slider .slick-list
43
+ {
44
+ -webkit-transform: translate3d(0, 0, 0);
45
+ -moz-transform: translate3d(0, 0, 0);
46
+ -ms-transform: translate3d(0, 0, 0);
47
+ -o-transform: translate3d(0, 0, 0);
48
+ transform: translate3d(0, 0, 0);
49
+ }
50
+
51
+ .slick-track
52
+ {
53
+ position: relative;
54
+ top: 0;
55
+ left: 0;
56
+
57
+ display: block;
58
+ }
59
+ .slick-track:before,
60
+ .slick-track:after
61
+ {
62
+ display: table;
63
+
64
+ content: '';
65
+ }
66
+ .slick-track:after
67
+ {
68
+ clear: both;
69
+ }
70
+ .slick-loading .slick-track
71
+ {
72
+ visibility: hidden;
73
+ }
74
+
75
+ .slick-slide
76
+ {
77
+ display: none;
78
+ float: left;
79
+
80
+ height: 100%;
81
+ min-height: 1px;
82
+ }
83
+ [dir='rtl'] .slick-slide
84
+ {
85
+ float: right;
86
+ }
87
+ .slick-slide img
88
+ {
89
+ display: block;
90
+ }
91
+ .slick-slide.slick-loading img
92
+ {
93
+ display: none;
94
+ }
95
+ .slick-slide.dragging img
96
+ {
97
+ pointer-events: none;
98
+ }
99
+ .slick-initialized .slick-slide
100
+ {
101
+ display: block;
102
+ }
103
+ .slick-loading .slick-slide
104
+ {
105
+ visibility: hidden;
106
+ }
107
+ .slick-vertical .slick-slide
108
+ {
109
+ display: block;
110
+
111
+ height: auto;
112
+
113
+ border: 1px solid transparent;
114
+ }
115
+ .slick-arrow.slick-hidden {
116
+ display: none;
117
+ }
assets/js/lib/Vticker.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*! vTicker 1.21 http://richhollis.github.com/vticker/ | http://richhollis.github.com/vticker/license/ | based on Jubgits vTicker http://www.jugbit.com/jquery-vticker-vertical-news-ticker/ */
2
+ (function(d){var g,c,f;g={speed:700,pause:4E3,showItems:1,mousePause:!0,height:0,animate:!0,margin:0,padding:0,startPaused:!1,autoAppend:!0};c={moveUp:function(a,b){return c.showNextItem(a,b,"up")},moveDown:function(a,b){return c.showNextItem(a,b,"down")},nextItemState:function(a,b){var e,c;c=a.element.children("ul");e=a.itemHeight;0<a.options.height&&(e=c.children("li:first").height());e+=a.options.margin+2*a.options.padding;return{height:e,options:a.options,el:a.element,obj:c,selector:"up"===b?
3
+ "li:first":"li:last",dir:b}},showNextItem:function(a,b,e){var d;d=c.nextItemState(a,e);d.el.trigger("vticker.beforeTick");e=d.obj.children(d.selector).clone(!0);"down"===d.dir&&d.obj.css("top","-"+d.height+"px").prepend(e);b&&b.animate?a.animating||c.animateNextItem(d,a):c.nonAnimatedNextItem(d);"up"===d.dir&&a.options.autoAppend&&e.appendTo(d.obj);return d.el.trigger("vticker.afterTick")},animateNextItem:function(a,b){b.animating=!0;return a.obj.animate("up"===a.dir?{top:"-="+a.height+"px"}:{top:0},
4
+ b.options.speed,function(){d(a.obj).children(a.selector).remove();d(a.obj).css("top","0px");return b.animating=!1})},nonAnimatedNextItem:function(a){a.obj.children(a.selector).remove();return a.obj.css("top","0px")},nextUsePause:function(){var a,b;b=d(this).data("state");a=b.options;if(!b.isPaused&&!c.hasSingleItem(b))return f.next.call(this,{animate:a.animate})},startInterval:function(){var a,b;b=d(this).data("state");a=b.options;return b.intervalId=setInterval(function(a){return function(){return c.nextUsePause.call(a)}}(this),
5
+ a.pause)},stopInterval:function(){var a;if(a=d(this).data("state"))return a.intervalId&&clearInterval(a.intervalId),a.intervalId=void 0},restartInterval:function(){c.stopInterval.call(this);return c.startInterval.call(this)},getState:function(a,b){var c;if(!(c=d(b).data("state")))throw Error("vTicker: No state available from "+a);return c},isAnimatingOrSingleItem:function(a){return a.animating||this.hasSingleItem(a)},hasMultipleItems:function(a){return 1<a.itemCount},hasSingleItem:function(a){return!c.hasMultipleItems(a)},
6
+ bindMousePausing:function(a){return function(a,e){return a.bind("mouseenter",function(){if(!e.isPaused)return e.pausedByCode=!0,c.stopInterval.call(this),f.pause.call(this,!0)}).bind("mouseleave",function(){if(!e.isPaused||e.pausedByCode)return e.pausedByCode=!1,f.pause.call(this,!1),c.startInterval.call(this)})}}(this),setItemLayout:function(a,b,c){var f;a.css({overflow:"hidden",position:"relative"}).children("ul").css({position:"relative",margin:0,padding:0}).children("li").css({margin:c.margin,
7
+ padding:c.padding});return isNaN(c.height)||0===c.height?(a.children("ul").children("li").each(function(){if(d(this).height()>b.itemHeight)return b.itemHeight=d(this).height()}),a.children("ul").children("li").each(function(){return d(this).height(b.itemHeight)}),f=c.margin+2*c.padding,a.height((b.itemHeight+f)*c.showItems+c.margin)):a.height(c.height)},defaultStateAttribs:function(a,b){return{itemCount:a.children("ul").children("li").length,itemHeight:0,itemMargin:0,element:a,animating:!1,options:b,
8
+ isPaused:b.startPaused,pausedByCode:!1}}};f={init:function(a){var b,e;d(this).data("state")&&f.stop.call(this);b=jQuery.extend({},g);a=d.extend(b,a);b=d(this);e=c.defaultStateAttribs(b,a);d(this).data("state",e);c.setItemLayout(b,e,a);a.startPaused||c.startInterval.call(this);if(a.mousePause)return c.bindMousePausing(b,e)},pause:function(a){var b;b=c.getState("pause",this);if(!c.hasMultipleItems(b))return!1;b.isPaused=a;b=b.element;if(a)return d(this).addClass("paused"),b.trigger("vticker.pause");
9
+ d(this).removeClass("paused");return b.trigger("vticker.resume")},next:function(a){var b;b=c.getState("next",this);if(c.isAnimatingOrSingleItem(b))return!1;c.restartInterval.call(this);return c.moveUp(b,a)},prev:function(a){var b;b=c.getState("prev",this);if(c.isAnimatingOrSingleItem(b))return!1;c.restartInterval.call(this);return c.moveDown(b,a)},stop:function(){c.getState("stop",this);return c.stopInterval.call(this)},remove:function(){var a;a=c.getState("remove",this);c.stopInterval.call(this);
10
+ a=a.element;a.unbind();return a.remove()}};return d.fn.vTicker=function(a){return f[a]?f[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!==typeof a&&a?d.error("Method "+a+" does not exist on jQuery.vTicker"):f.init.apply(this,arguments)}})(jQuery);
assets/js/lib/countUpmin.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(a,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e(require,exports,module):a.CountUp=e()}(this,function(a,e,n){var t=function(a,e,n,t,i,r){function o(a){a=a.toFixed(s.decimals),a+="";var e,n,t,i;if(e=a.split("."),n=e[0],t=e.length>1?s.options.decimal+e[1]:"",i=/(\d+)(\d{3})/,s.options.useGrouping)for(;i.test(n);)n=n.replace(i,"$1"+s.options.separator+"$2");return s.options.numerals.length&&(n=n.replace(/[0-9]/g,function(a){return s.options.numerals[+a]}),t=t.replace(/[0-9]/g,function(a){return s.options.numerals[+a]})),s.options.prefix+n+t+s.options.suffix}function u(a,e,n,t){return n*(-Math.pow(2,-10*a/t)+1)*1024/1023+e}function l(a){return"number"==typeof a&&!isNaN(a)}var s=this;if(s.version=function(){return"1.9.1"},s.options={useEasing:!0,useGrouping:!0,separator:",",decimal:".",easingFn:u,formattingFn:o,prefix:"",suffix:"",numerals:[]},r&&"object"==typeof r)for(var m in s.options)r.hasOwnProperty(m)&&null!==r[m]&&(s.options[m]=r[m]);""===s.options.separator&&(s.options.useGrouping=!1);for(var d=0,c=["webkit","moz","ms","o"],f=0;f<c.length&&!window.requestAnimationFrame;++f)window.requestAnimationFrame=window[c[f]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[c[f]+"CancelAnimationFrame"]||window[c[f]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(a,e){var n=(new Date).getTime(),t=Math.max(0,16-(n-d)),i=window.setTimeout(function(){a(n+t)},t);return d=n+t,i}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(a){clearTimeout(a)}),s.initialize=function(){return!!s.initialized||(s.error="",s.d="string"==typeof a?document.getElementById(a):a,s.d?(s.startVal=Number(e),s.endVal=Number(n),l(s.startVal)&&l(s.endVal)?(s.decimals=Math.max(0,t||0),s.dec=Math.pow(10,s.decimals),s.duration=1e3*Number(i)||2e3,s.countDown=s.startVal>s.endVal,s.frameVal=s.startVal,s.initialized=!0,!0):(s.error="[CountUp] startVal ("+e+") or endVal ("+n+") is not a number",!1)):(s.error="[CountUp] target is null or undefined",!1))},s.printValue=function(a){var e=s.options.formattingFn(a);"INPUT"===s.d.tagName?this.d.value=e:"text"===s.d.tagName||"tspan"===s.d.tagName?this.d.textContent=e:this.d.innerHTML=e},s.count=function(a){s.startTime||(s.startTime=a),s.timestamp=a;var e=a-s.startTime;s.remaining=s.duration-e,s.options.useEasing?s.countDown?s.frameVal=s.startVal-s.options.easingFn(e,0,s.startVal-s.endVal,s.duration):s.frameVal=s.options.easingFn(e,s.startVal,s.endVal-s.startVal,s.duration):s.countDown?s.frameVal=s.startVal-(s.startVal-s.endVal)*(e/s.duration):s.frameVal=s.startVal+(s.endVal-s.startVal)*(e/s.duration),s.countDown?s.frameVal=s.frameVal<s.endVal?s.endVal:s.frameVal:s.frameVal=s.frameVal>s.endVal?s.endVal:s.frameVal,s.frameVal=Math.round(s.frameVal*s.dec)/s.dec,s.printValue(s.frameVal),e<s.duration?s.rAF=requestAnimationFrame(s.count):s.callback&&s.callback()},s.start=function(a){s.initialize()&&(s.callback=a,s.rAF=requestAnimationFrame(s.count))},s.pauseResume=function(){s.paused?(s.paused=!1,delete s.startTime,s.duration=s.remaining,s.startVal=s.frameVal,requestAnimationFrame(s.count)):(s.paused=!0,cancelAnimationFrame(s.rAF))},s.reset=function(){s.paused=!1,delete s.startTime,s.initialized=!1,s.initialize()&&(cancelAnimationFrame(s.rAF),s.printValue(s.startVal))},s.update=function(a){if(s.initialize()){if(a=Number(a),!l(a))return void(s.error="[CountUp] update() - new endVal is not a number: "+a);s.error="",a!==s.frameVal&&(cancelAnimationFrame(s.rAF),s.paused=!1,delete s.startTime,s.startVal=s.frameVal,s.endVal=a,s.countDown=s.startVal>s.endVal,s.rAF=requestAnimationFrame(s.count))}},s.initialize()&&s.printValue(s.startVal)};return t});
assets/js/lib/gomap.js ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /**
3
+ * jQuery goMap
4
+ *
5
+ * @url http://www.pittss.lv/jquery/gomap/
6
+ * @author Jevgenijs Shtrauss <pittss@gmail.com>
7
+ * @version 1.3.3 2014.11.27
8
+ * This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
9
+ */
10
+
11
+ eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(c($){b 2K=y h.g.3w();c 1o(t){3.16(t)};1o.1W=y h.g.3x();1o.1W.4h=c(){};1o.1W.42=c(){};1o.1W.3v=c(){};$.k={};$.3s.k=c(5){r 3.4f(c(){b k=$(3).o(\'k\');7(!k){b 1y=$.1H(B,{},$.1y);$(3).o(\'k\',1y.2H(3,5));$.k=1y}n{$.k=k}})};$.1y={2O:{D:\'\',G:3V.9,F:24.1,2B:4,1L:47,2X:B,38:B,39:\'3o\',3m:\'3u\',2F:\'3F\',1w:B,X:{u:\'49\',J:\'31\'},2j:B,Z:{u:\'3q\',J:\'31\'},2e:w,2d:B,3y:w,3E:H,2c:w,2A:w,e:[],C:[],1i:{O:\'#1j\',M:1.0,N:2},19:{O:\'#1j\',M:1.0,N:2,R:\'#1j\',S:0.2},U:{O:\'#1j\',M:1.0,N:2,R:\'#1j\',S:0.2},1Q:{O:\'#1j\',M:1.0,N:2,R:\'#1j\',S:0.2},3k:\'3J\',1p:\'<1l 3W="3Y">\',1v:\'</1l>\',1t:w},t:H,1K:0,e:[],2P:[],2Q:[],2R:[],2S:[],1A:[],1E:[],1g:w,1b:H,C:H,x:H,p:H,2g:H,29:H,2o:H,2z:H,8:H,1O:H,2H:c(2h,5){b 8=$.1H(B,{},$.1y.2O,5);3.p=$(2h);3.8=8;7(8.D)3.14({D:8.D,1d:B});n 7($.2T(8.e)&&8.e.v>0){7(8.e[0].D)3.14({D:8.e[0].D,1d:B});n 3.1O=y h.g.W(8.e[0].G,8.e[0].F)}n 3.1O=y h.g.W(8.G,8.F);b 33={1d:3.1O,2c:8.2c,2j:8.2j,2A:8.2A,Z:{u:h.g.1s[8.Z.u.11()],J:h.g.3b[8.Z.J.11()]},3f:h.g.3r[8.3k.11()],3g:8.1w,3i:8.1w,3j:{u:h.g.1s[8.X.u.11()]},1I:{u:h.g.1s[8.X.u.11()],J:h.g.28[8.X.J.11()]},2e:8.2e,2d:8.2d,2B:8.2B};3.t=y h.g.3B(2h,33);3.x=y 1o(3.t);3.C={1i:{q:\'2g\',z:\'2P\',1M:\'2I\'},19:{q:\'29\',z:\'2Q\',1M:\'2J\'},U:{q:\'2o\',z:\'2R\',1M:\'2L\'},1Q:{q:\'2z\',z:\'2S\',1M:\'2N\'}};3.2g=$(\'<1l J="Q:1Y;"/>\').21(3.p);3.29=$(\'<1l J="Q:1Y;"/>\').21(3.p);3.2o=$(\'<1l J="Q:1Y;"/>\').21(3.p);3.2z=$(\'<1l J="Q:1Y;"/>\').21(3.p);I(b j=0,l=8.e.v;j<l;j++)3.1J(8.e[j]);I(b j=0,l=8.C.v;j<l;j++)3[3.C[8.C[j].d].1M](8.C[j]);b k=3;7(8.1t==B||8.1t==\'3p\'){h.g.L.1n(k.t,\'2b\',c(L){b 5={u:L.3a,1z:B};b 6=k.1J(5);h.g.L.1n(6,\'2G\',c(L){6.16(H);k.2r(6.q)})})}n 7(8.1t==\'3D\'){h.g.L.1n(k.t,\'2b\',c(L){7(!k.1P){b 5={u:L.3a,1z:B};b 6=k.1J(5);k.1P=B;h.g.L.1n(6,\'2G\',c(L){6.16(H);k.2r(6.q);k.1P=w})}})}K 8.e;K 8.C;r 3},3G:c(f){h.g.L.3N(3.t,\'3R\',c(){r f()})},14:c(D,5){b k=3;1V(c(){2K.14({\'D\':D.D},c(1X,1F){7(1F==h.g.1Z.2k&&D.1d)k.t.44(1X[0].2l.2n);7(1F==h.g.1Z.2k&&5&&5.E)5.E.4a(1X[0].2l.2n);n 7(1F==h.g.1Z.2k&&5){7(k.1g){k.1g=w;5.u=1X[0].2l.2n;5.14=B;k.1J(5)}}n 7(1F==h.g.1Z.4c){k.14(D,5)}})},3.8.1L)},2q:c(){7(3.1E.v>0&&!3.1g){3.1g=B;b 18=3.1E.26(0,1);3.14({D:18[0].D},18[0])}n 7(3.1g){b k=3;1V(c(){k.2q()},3.8.1L)}},16:c(5){K 5.3f;7(5.D){3.14({D:5.D,1d:B});K 5.D}n 7(5.G&&5.F){5.1d=y h.g.W(5.G,5.F);K 5.F;K 5.G}7(5.Z&&5.Z.u)5.Z.u=h.g.1s[5.Z.u.11()];7(5.Z&&5.Z.J)5.Z.J=h.g.3b[5.Z.J.11()];7(1h 5.1w!==\'1G\'){5.3g=5.1w;5.3i=5.1w}7(5.X&&5.X.u){5.3j={u:h.g.1s[5.X.u.11()]};5.1I={u:h.g.1s[5.X.u.11()]}}7(5.X&&5.X.J){7(1h 5.1I===\'1G\')5.1I={J:h.g.28[5.X.J.11()]};n 5.1I.J=h.g.28[5.X.J.11()]}3.t.1U(5)},2U:c(){r 3.t},2W:c(d,L,o){b 1k;7(1h d!=\'2Y\')d={d:d};7(d.d==\'t\')1k=3.t;n 7(d.d==\'6\'&&d.6)1k=$(3.p).o(d.6);n 7(d.d==\'m\'&&d.6)1k=$(3.p).o(d.6+\'m\');7(1k)r h.g.L.1n(1k,L,o);n 7((d.d==\'6\'||d.d==\'m\')&&3.2E()!=3.2i())b k=3;1V(c(){k.2W(d,L,o)},3.8.1L)},34:c(35){h.g.L.34(35)},36:c(6,A){b k=3;A.1x=k.8.1p+A.1x+k.8.1v;b P=y h.g.3M(A);P.Y=w;$(k.p).o(6.q+\'m\',P);7(A.3O){k.2p(P,6,A);P.Y=B}h.g.L.1n(6,\'2b\',c(){7(P.Y&&k.8.2X){P.1u();P.Y=w}n{k.2p(P,6,A);P.Y=B}})},2p:c(P,6,A){b k=3;7(3.8.38)3.3h();7(A.25){P.2t(3.t,6);$.25({40:A.25,41:c(A){P.2u(k.8.1p+A+k.8.1v)}})}n 7(A.q){P.2u(k.8.1p+$(A.q).A()+k.8.1v);P.2t(3.t,6)}n P.2t(3.t,6)},43:c(q,1N){b m=$(3.p).o(q+\'m\');7(1h 1N==\'2Y\')m.1U(k.8.1p+1N+k.8.1v);n m.2u(k.8.1p+1N+k.8.1v)},45:c(q,3l){b m=$(3.p).o(q+\'m\').48();7(3l)r $(m).A();n r m},3h:c(){I(b i=0,l=3.e.v;i<l;i++){b m=$(3.p).o(3.e[i]+\'m\');7(m){m.1u();m.Y=w}}},2C:c(d,e){b k=3;7(3.2E()!=3.2i())1V(c(){k.2C(d,e)},3.8.1L);n{3.1b=y h.g.27();7(!d||(d&&d==\'4b\')){I(b i=0,l=3.e.v;i<l;i++){3.1b.1H($(3.p).o(3.e[i]).u)}}n 7(d&&d==\'1B\'){I(b i=0,l=3.e.v;i<l;i++){7(3.1C(3.e[i]))3.1b.1H($(3.p).o(3.e[i]).u)}}n 7(d&&d==\'e\'&&$.2T(e)){I(b i=0,l=e.v;i<l;i++){3.1b.1H($(3.p).o(e[i]).u)}}3.t.2C(3.1b)}},2a:c(){r 3.t.2a()},2I:c(a){a.d=\'1i\';r 3.1D(a)},2J:c(a){a.d=\'19\';r 3.1D(a)},2L:c(a){a.d=\'U\';r 3.1D(a)},2N:c(a){a.d=\'1Q\';r 3.1D(a)},1D:c(a){b x=[];7(!a.q){3.1K++;a.q=3.8.3m+3.1K}2M(a.d){17\'1i\':7(a.V.v>0){I(b j=0,l=a.V.v;j<l;j++)x.T(y h.g.W(a.V[j].G,a.V[j].F));x=y h.g.3t({t:3.t,2f:x,1R:a.O?a.O:3.8.1i.O,1S:a.M?a.M:3.8.1i.M,1T:a.N?a.N:3.8.1i.N})}n r w;10;17\'19\':7(a.V.v>0){I(b j=0,l=a.V.v;j<l;j++)x.T(y h.g.W(a.V[j].G,a.V[j].F));x=y h.g.3z({t:3.t,2f:x,1R:a.O?a.O:3.8.19.O,1S:a.M?a.M:3.8.19.M,1T:a.N?a.N:3.8.19.N,R:a.R?a.R:3.8.19.R,S:a.S?a.S:3.8.19.S})}n r w;10;17\'U\':x=y h.g.3A({t:3.t,1d:y h.g.W(a.G,a.F),2V:a.2V,1R:a.O?a.O:3.8.U.O,1S:a.M?a.M:3.8.U.M,1T:a.N?a.N:3.8.U.N,R:a.R?a.R:3.8.U.R,S:a.S?a.S:3.8.U.S});10;17\'1Q\':x=y h.g.3C({t:3.t,1b:y h.g.27(y h.g.W(a.1r.G,a.1r.F),y h.g.W(a.1q.G,a.1q.F)),1R:a.O?a.O:3.8.U.O,1S:a.M?a.M:3.8.U.M,1T:a.N?a.N:3.8.U.N,R:a.R?a.R:3.8.U.R,S:a.S?a.S:3.8.U.S});10;2m:r w;10}3.2Z(a,x);r x},2Z:c(a,x){$(3[3.C[a.d].q]).o(a.q,x);3[3.C[a.d].z].T(a.q)},3H:c(d,x,5){x=$(3[3.C[d].q]).o(x);7(5.V&&5.V.v>0){b z=[];I(b j=0,l=5.V.v;j<l;j++)z.T(y h.g.W(5.V[j].G,5.V[j].F));5.2f=z;K 5.V}n 7(5.1q&&5.1r){5.1b=y h.g.27(y h.g.W(5.1r.G,5.1r.F),y h.g.W(5.1q.G,5.1q.F));K 5.1q;K 5.1r}n 7(5.G&&5.F){5.1d=y h.g.W(5.G,5.F);K 5.G;K 5.F}x.1U(5)},3I:c(d,x,Q){7(1h Q===\'1G\'){7(3.30(d,x))Q=w;n Q=B}7(Q)$(3[3.C[d].q]).o(x).16(3.t);n $(3[3.C[d].q]).o(x).16(H)},30:c(d,x){7($(3[3.C[d].q]).o(x).2U())r B;n r w},3K:c(d){r 3[3.C[d].z].v},3L:c(d,x){b 1f=$.32(x,3[3.C[d].z]),18;7(1f>-1){18=3[3.C[d].z].26(1f,1);b E=18[0];$(3[3.C[d].q]).o(E).16(H);$(3[3.C[d].q]).1m(E);r B}r w},3P:c(d){I(b i=0,l=3[3.C[d].z].v;i<l;i++){b E=3[3.C[d].z][i];$(3[3.C[d].q]).o(E).16(H);$(3[3.C[d].q]).1m(E)}3[3.C[d].z]=[]},3Q:c(6,Q){7(1h Q===\'1G\'){7(3.1C(6)){$(3.p).o(6).1c(w);b m=$(3.p).o(6+\'m\');7(m&&m.Y){m.1u();m.Y=w}}n $(3.p).o(6).1c(B)}n $(3.p).o(6).1c(Q)},3S:c(13,Q){I(b i=0,l=3.e.v;i<l;i++){b E=3.e[i];b 6=$(3.p).o(E);7(6.13==13){7(1h Q===\'1G\'){7(3.1C(E)){6.1c(w);b m=$(3.p).o(E+\'m\');7(m&&m.Y){m.1u();m.Y=w}}n 6.1c(B)}n 6.1c(Q)}}},1C:c(6){r $(3.p).o(6).3T()},2E:c(){r 3.e.v},2i:c(){r 3.1A.v},3U:c(){r 3.20(\'37\').v},3X:c(13){r 3.20(\'13\',13).v},20:c(d,2s){b z=[];2M(d){17"3Z":I(b i=0,l=3.e.v;i<l;i++){b 1a="\'"+i+"\': \'"+$(3.p).o(3.e[i]).22().2v()+"\'";z.T(1a)}z="{\'e\':{"+z.3c(",")+"}}";10;17"o":I(b i=0,l=3.e.v;i<l;i++){b 1a="6["+i+"]="+$(3.p).o(3.e[i]).22().2v();z.T(1a)}z=z.3c("&");10;17"3d":I(b i=0,l=3.e.v;i<l;i++){7(3.3e($(3.p).o(3.e[i]).22()))z.T(3.e[i])}10;17"37":I(b i=0,l=3.e.v;i<l;i++){7(3.1C(3.e[i]))z.T(3.e[i])}10;17"13":7(2s)I(b i=0,l=3.e.v;i<l;i++){7($(3.p).o(3.e[i]).13==2s)z.T(3.e[i])}10;17"e":I(b i=0,l=3.e.v;i<l;i++){b 1a=$(3.p).o(3.e[i]);z.T(1a)}10;2m:I(b i=0,l=3.e.v;i<l;i++){b 1a=$(3.p).o(3.e[i]).22().2v();z.T(1a)}10}r z},46:c(){r 3.20(\'3d\')},1J:c(6){7(!6.14){3.1K++;7(!6.q)6.q=3.8.39+3.1K;3.1A.T(6.q)}7(6.D&&!6.14){3.1E.T(6);3.2q()}n 7(6.G&&6.F||6.u){b 5={t:3.t};5.q=6.q;5.13=6.13?6.13:3.8.2F;5.2w=6.2w?6.2w:0;5.2x=6.2x?6.2x:0;7(6.1B==w)5.1B=6.1B;7(6.2y)5.2y=6.2y;7(6.1z)5.1z=6.1z;7(6.s&&6.s.1e){5.s=6.s.1e;7(6.s.12)5.12=6.s.12}n 7(6.s)5.s=6.s;n 7(3.8.s&&3.8.s.1e){5.s=3.8.s.1e;7(3.8.s.12)5.12=3.8.s.12}n 7(3.8.s)5.s=3.8.s;5.u=6.u?6.u:y h.g.W(6.G,6.F);b 23=y h.g.4d(5);7(6.A){7(!6.A.1x&&!6.A.25&&!6.A.q)6.A={1x:6.A};n 7(!6.A.1x)6.A.1x=H;3.36(23,6.A)}3.1t(23);r 23}},1t:c(6){$(3.p).o(6.q,6);3.e.T(6.q)},4e:c(6,5){b 2D=$(3.p).o(6);K 5.q;K 5.1B;7(5.s){b 15=5.s;K 5.s;7(15&&15==\'2m\'){7(3.8.s&&3.8.s.1e){5.s=3.8.s.1e;7(3.8.s.12)5.12=3.8.s.12}n 7(3.8.s)5.s=3.8.s}n 7(15&&15.1e){5.s=15.1e;7(15.12)5.12=15.12}n 7(15)5.s=15}7(5.D){3.14({D:5.D},{E:2D});K 5.D;K 5.G;K 5.F;K 5.u}n 7(5.G&&5.F||5.u){7(!5.u)5.u=y h.g.W(5.G,5.F)}2D.1U(5)},2r:c(6){b 1f=$.32(6,3.e),18;7(1f>-1){3.1A.26(1f,1);18=3.e.26(1f,1);b E=18[0];b 6=$(3.p).o(E);b m=$(3.p).o(E+\'m\');6.1c(w);6.16(H);$(3.p).1m(E);7(m){m.1u();m.Y=w;$(3.p).1m(E+\'m\')}r B}r w},4g:c(){I(b i=0,l=3.e.v;i<l;i++){b E=3.e[i];b 6=$(3.p).o(E);b m=$(3.p).o(E+\'m\');6.1c(w);6.16(H);$(3.p).1m(E);7(m){m.1u();m.Y=w;$(3.p).1m(E+\'m\')}}3.1P=w;3.1g=w;3.e=[];3.1A=[];3.1E=[]},3e:c(3n){r 3.t.2a().4i(3n)}}})(4j);',62,268,'|||this||options|marker|if|opts||poly|var|function|type|markers||maps|google|||goMap||info|else|data|mapId|id|return|icon|map|position|length|false|overlay|new|array|html|true|overlays|address|markerId|longitude|latitude|null|for|style|delete|event|opacity|weight|color|infowindow|display|fillColor|fillOpacity|push|circle|coords|LatLng|navigationControlOptions|show|mapTypeControlOptions|break|toUpperCase|shadow|group|geocode|toption|setMap|case|current|polygon|temp|bounds|setVisible|center|image|index|lockGeocode|typeof|polyline|FF0000|target|div|removeData|addListener|MyOverlay|html_prepend|ne|sw|ControlPosition|addMarker|close|html_append|navigationControl|content|goMapBase|draggable|tmpMarkers|visible|getVisibleMarker|createOverlay|geoMarkers|status|undefined|extend|zoomControlOptions|createMarker|count|delay|create|text|centerLatLng|singleMarker|rectangle|strokeColor|strokeOpacity|strokeWeight|setOptions|setTimeout|prototype|results|none|GeocoderStatus|getMarkers|appendTo|getPosition|cmarker||ajax|splice|LatLngBounds|ZoomControlStyle|pgId|getBounds|click|disableDoubleClickZoom|scrollwheel|scaleControl|path|plId|el|getTmpMarkerCount|mapTypeControl|OK|geometry|default|location|cId|openWindow|geoMarker|removeMarker|name|open|setContent|toUrlValue|zIndex|zIndexOrg|title|rId|streetViewControl|zoom|fitBounds|tmarker|getMarkerCount|groupId|dblclick|init|createPolyline|createPolygon|geocoder|createCircle|switch|createRectangle|defaults|polylines|polygons|circles|rectangles|isArray|getMap|radius|createListener|hideByClick|object|addOverlay|getVisibleOverlay|DEFAULT|inArray|myOptions|removeListener|listener|setInfoWindow|visiblesInMap|oneInfoWindow|prefixId|latLng|MapTypeControlStyle|join|visiblesInBounds|isVisible|mapTypeId|panControl|clearInfo|zoomControl|panControlOptions|maptype|hideDiv|polyId|latlng|gomarker|multi|TOP_RIGHT|MapTypeId|fn|Polyline|gopoly|draw|Geocoder|OverlayView|directions|Polygon|Circle|Map|Rectangle|single|directionsResult|gogroup|ready|setOverlay|showHideOverlay|HYBRID|getOverlaysCount|removeOverlay|InfoWindow|addListenerOnce|popup|clearOverlays|showHideMarker|bounds_changed|showHideMarkerByGroup|getVisible|getVisibleMarkerCount|56|class|getMarkerByGroupCount|gomapMarker|json|url|success|onRemove|setInfo|setCenter|getInfo|getVisibleMarkers|200|getContent|TOP_LEFT|setPosition|all|OVER_QUERY_LIMIT|Marker|setMarker|each|clearMarkers|onAdd|contains|jQuery'.split('|'),0,{}))
assets/js/lib/jquerycountdown.js ADDED
@@ -0,0 +1,816 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function(){var j=false;window.JQClass=function(){};JQClass.classes={};JQClass.extend=function extender(f){var g=this.prototype;j=true;var h=new this();j=false;for(var i in f){h[i]=typeof f[i]=='function'&&typeof g[i]=='function'?(function(d,e){return function(){var b=this._super;this._super=function(a){return g[d].apply(this,a)};var c=e.apply(this,arguments);this._super=b;return c}})(i,f[i]):f[i]}function JQClass(){if(!j&&this._init){this._init.apply(this,arguments)}}JQClass.prototype=h;JQClass.prototype.constructor=JQClass;JQClass.extend=extender;return JQClass}})();(function($){JQClass.classes.JQPlugin=JQClass.extend({name:'plugin',defaultOptions:{},regionalOptions:{},_getters:[],_getMarker:function(){return'is-'+this.name},_init:function(){$.extend(this.defaultOptions,(this.regionalOptions&&this.regionalOptions[''])||{});var c=camelCase(this.name);$[c]=this;$.fn[c]=function(a){var b=Array.prototype.slice.call(arguments,1);if($[c]._isNotChained(a,b)){return $[c][a].apply($[c],[this[0]].concat(b))}return this.each(function(){if(typeof a==='string'){if(a[0]==='_'||!$[c][a]){throw'Unknown method: '+a;}$[c][a].apply($[c],[this].concat(b))}else{$[c]._attach(this,a)}})}},setDefaults:function(a){$.extend(this.defaultOptions,a||{})},_isNotChained:function(a,b){if(a==='option'&&(b.length===0||(b.length===1&&typeof b[0]==='string'))){return true}return $.inArray(a,this._getters)>-1},_attach:function(a,b){a=$(a);if(a.hasClass(this._getMarker())){return}a.addClass(this._getMarker());b=$.extend({},this.defaultOptions,this._getMetadata(a),b||{});var c=$.extend({name:this.name,elem:a,options:b},this._instSettings(a,b));a.data(this.name,c);this._postAttach(a,c);this.option(a,b)},_instSettings:function(a,b){return{}},_postAttach:function(a,b){},_getMetadata:function(d){try{var f=d.data(this.name.toLowerCase())||'';f=f.replace(/'/g,'"');f=f.replace(/([a-zA-Z0-9]+):/g,function(a,b,i){var c=f.substring(0,i).match(/"/g);return(!c||c.length%2===0?'"'+b+'":':b+':')});f=$.parseJSON('{'+f+'}');for(var g in f){var h=f[g];if(typeof h==='string'&&h.match(/^new Date\((.*)\)$/)){f[g]=eval(h)}}return f}catch(e){return{}}},_getInst:function(a){return $(a).data(this.name)||{}},option:function(a,b,c){a=$(a);var d=a.data(this.name);if(!b||(typeof b==='string'&&c==null)){var e=(d||{}).options;return(e&&b?e[b]:e)}if(!a.hasClass(this._getMarker())){return}var e=b||{};if(typeof b==='string'){e={};e[b]=c}this._optionsChanged(a,d,e);$.extend(d.options,e)},_optionsChanged:function(a,b,c){},destroy:function(a){a=$(a);if(!a.hasClass(this._getMarker())){return}this._preDestroy(a,this._getInst(a));a.removeData(this.name).removeClass(this._getMarker())},_preDestroy:function(a,b){}});function camelCase(c){return c.replace(/-([a-z])/g,function(a,b){return b.toUpperCase()})}$.JQPlugin={createPlugin:function(a,b){if(typeof a==='object'){b=a;a='JQPlugin'}a=camelCase(a);var c=camelCase(b.name);JQClass.classes[c]=JQClass.classes[a].extend(b);new JQClass.classes[c]()}}})(jQuery);
2
+ /* http://keith-wood.name/countdown.html
3
+ Countdown for jQuery v2.0.0.
4
+ Written by Keith Wood (kbwood{at}iinet.com.au) January 2008.
5
+ Available under the MIT (https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt) license.
6
+ Please attribute the author if you use it. */
7
+ (function($) { // Hide scope, no $ conflict
8
+ var pluginName = 'pre_countdown';
9
+ var Y = 0; // Years
10
+ var O = 1; // Months
11
+ var W = 2; // Weeks
12
+ var D = 3; // Days
13
+ var H = 4; // Hours
14
+ var M = 5; // Minutes
15
+ var S = 6; // Seconds
16
+ /** Create the countdown plugin.
17
+ <p>Sets an element to show the time remaining until a given instant.</p>
18
+ <p>Expects HTML like:</p>
19
+ <pre>&lt;div>&lt;/div></pre>
20
+ <p>Provide inline configuration like:</p>
21
+ <pre>&lt;div data-countdown="name: 'value'">&lt;/div></pre>
22
+ @module Countdown
23
+ @augments JQPlugin
24
+ @example $(selector).countdown({until: +300}) */
25
+ $.JQPlugin.createPlugin({
26
+ /** The name of the plugin. */
27
+ name: pluginName,
28
+ /** Countdown expiry callback.
29
+ Triggered when the countdown expires.
30
+ @callback expiryCallback */
31
+ /** Countdown server synchronisation callback.
32
+ Triggered when the countdown is initialised.
33
+ @callback serverSyncCallback
34
+ @return {Date} The current date/time on the server as expressed in the local timezone. */
35
+ /** Countdown tick callback.
36
+ Triggered on every <code>tickInterval</code> ticks of the countdown.
37
+ @callback tickCallback
38
+ @param periods {number[]} The breakdown by period (years, months, weeks, days,
39
+ hours, minutes, seconds) of the time remaining/passed. */
40
+ /** Countdown which labels callback.
41
+ Triggered when the countdown is being display to determine which set of labels
42
+ (<code>labels</code>, <code>labels1</code>, ...) are to be used for the current period value.
43
+ @callback whichLabelsCallback
44
+ @param num {number} The current period value.
45
+ @return {number} The suffix for the label set to use. */
46
+ /** Default settings for the plugin.
47
+ @property until {Date|number|string} The date/time to count down to, or number of seconds
48
+ offset from now, or string of amounts and units for offset(s) from now:
49
+ 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.
50
+ @example until: new Date(2013, 12-1, 25, 13, 30)
51
+ until: +300
52
+ until: '+1O -2D'
53
+ @property [since] {Date|number|string} The date/time to count up from, or
54
+ number of seconds offset from now, or string for unit offset(s):
55
+ 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.
56
+ @example since: new Date(2013, 1-1, 1)
57
+ since: -300
58
+ since: '-1O +2D'
59
+ @property [timezone=null] {number} The timezone (hours or minutes from GMT) for the target times,
60
+ or null for client local timezone.
61
+ @example timezone: +10
62
+ timezone: -60
63
+ @property [serverSync=null] {serverSyncCallback} A function to retrieve the current server time
64
+ for synchronisation.
65
+ @property [format='dHMS'] {string} The format for display - upper case for always, lower case only if non-zero,
66
+ 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.
67
+ @property [layout=''] {string} Build your own layout for the countdown.
68
+ @example layout: '{d<}{dn} {dl}{d>} {hnn}:{mnn}:{snn}'
69
+ @property [compact=false] {boolean} True to display in a compact format, false for an expanded one.
70
+ @property [padZeroes=false] {boolean} True to add leading zeroes
71
+ @property [significant=0] {number} The number of periods with non-zero values to show, zero for all.
72
+ @property [description=''] {string} The description displayed for the countdown.
73
+ @property [expiryUrl=''] {string} A URL to load upon expiry, replacing the current page.
74
+ @property [expiryText=''] {string} Text to display upon expiry, replacing the countdown. This may be HTML.
75
+ @property [alwaysExpire=false] {boolean} True to trigger <code>onExpiry</code> even if target time has passed.
76
+ @property [onExpiry=null] {expiryCallback} Callback when the countdown expires -
77
+ receives no parameters and <code>this</code> is the containing division.
78
+ @example onExpiry: function() {
79
+ ...
80
+ }
81
+ @property [onTick=null] {tickCallback} Callback when the countdown is updated -
82
+ receives <code>number[7]</code> being the breakdown by period
83
+ (years, months, weeks, days, hours, minutes, seconds - based on
84
+ <code>format</code>) and <code>this</code> is the containing division.
85
+ @example onTick: function(periods) {
86
+ var secs = $.countdown.periodsToSeconds(periods);
87
+ if (secs < 300) { // Last five minutes
88
+ ...
89
+ }
90
+ }
91
+ @property [tickInterval=1] {number} The interval (seconds) between <code>onTick</code> callbacks. */
92
+ defaultOptions: {
93
+ until: null,
94
+ since: null,
95
+ timezone: null,
96
+ serverSync: null,
97
+ format: 'dHMS',
98
+ layout: '',
99
+ compact: false,
100
+ padZeroes: false,
101
+ significant: 0,
102
+ description: '',
103
+ expiryUrl: '',
104
+ expiryText: '',
105
+ alwaysExpire: false,
106
+ onExpiry: null,
107
+ onTick: null,
108
+ tickInterval: 1
109
+ },
110
+ /** Localisations for the plugin.
111
+ Entries are objects indexed by the language code ('' being the default US/English).
112
+ Each object has the following attributes.
113
+ @property [labels=['Years','Months','Weeks','Days','Hours','Minutes','Seconds']] {string[]}
114
+ The display texts for the counter periods.
115
+ @property [labels1=['Year','Month','Week','Day','Hour','Minute','Second']] {string[]}
116
+ The display texts for the counter periods if they have a value of 1.
117
+ Add other <code>labels<em>n</em></code> attributes as necessary to
118
+ cater for other numeric idiosyncrasies of the localisation.
119
+ @property [compactLabels=['y','m','w','d']] {string[]} The compact texts for the counter periods.
120
+ @property [whichLabels=null] {whichLabelsCallback} A function to determine which
121
+ <code>labels<em>n</em></code> to use.
122
+ @example whichLabels: function(num) {
123
+ return (num > 1 ? 0 : 1);
124
+ }
125
+ @property [digits=['0','1',...,'9']] {number[]} The digits to display (0-9).
126
+ @property [timeSeparator=':'] {string} Separator for time periods in the compact layout.
127
+ @property [isRTL=false] {boolean} True for right-to-left languages, false for left-to-right. */
128
+ regionalOptions: { // Available regional settings, indexed by language/country code
129
+ '': { // Default regional settings - English/US
130
+ labels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'],
131
+ labels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'],
132
+ compactLabels: ['y', 'm', 'w', 'd'],
133
+ whichLabels: null,
134
+ digits: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
135
+ timeSeparator: ':',
136
+ isRTL: false
137
+ }
138
+ },
139
+ /** Names of getter methods - those that can't be chained. */
140
+ _getters: ['getTimes'],
141
+ /* Class name for the right-to-left marker. */
142
+ _rtlClass: pluginName + '-rtl',
143
+ /* Class name for the countdown section marker. */
144
+ _sectionClass: pluginName + '-section',
145
+ /* Class name for the period amount marker. */
146
+ _amountClass: pluginName + '-amount',
147
+ /* Class name for the period name marker. */
148
+ _periodClass: pluginName + '-period',
149
+ /* Class name for the countdown row marker. */
150
+ _rowClass: pluginName + '-row',
151
+ /* Class name for the holding countdown marker. */
152
+ _holdingClass: pluginName + '-holding',
153
+ /* Class name for the showing countdown marker. */
154
+ _showClass: pluginName + '-show',
155
+ /* Class name for the description marker. */
156
+ _descrClass: pluginName + '-descr',
157
+ /* List of currently active countdown elements. */
158
+ _timerElems: [],
159
+ /** Additional setup for the countdown.
160
+ Apply default localisations.
161
+ Create the timer. */
162
+ _init: function() {
163
+ var self = this;
164
+ this._super();
165
+ this._serverSyncs = [];
166
+ var now = (typeof Date.now == 'function' ? Date.now :
167
+ function() { return new Date().getTime(); });
168
+ var perfAvail = (window.performance && typeof window.performance.now == 'function');
169
+ // Shared timer for all countdowns
170
+ function timerCallBack(timestamp) {
171
+ var drawStart = (timestamp < 1e12 ? // New HTML5 high resolution timer
172
+ (perfAvail ? (performance.now() + performance.timing.navigationStart) : now()) :
173
+ // Integer milliseconds since unix epoch
174
+ timestamp || now());
175
+ if (drawStart - animationStartTime >= 1000) {
176
+ self._updateElems();
177
+ animationStartTime = drawStart;
178
+ }
179
+ requestAnimationFrame(timerCallBack);
180
+ }
181
+ var requestAnimationFrame = window.requestAnimationFrame ||
182
+ window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame ||
183
+ window.oRequestAnimationFrame || window.msRequestAnimationFrame || null;
184
+ // This is when we expect a fall-back to setInterval as it's much more fluid
185
+ var animationStartTime = 0;
186
+ if (!requestAnimationFrame || $.noRequestAnimationFrame) {
187
+ $.noRequestAnimationFrame = null;
188
+ setInterval(function() { self._updateElems(); }, 980); // Fall back to good old setInterval
189
+ }
190
+ else {
191
+ animationStartTime = window.animationStartTime ||
192
+ window.webkitAnimationStartTime || window.mozAnimationStartTime ||
193
+ window.oAnimationStartTime || window.msAnimationStartTime || now();
194
+ requestAnimationFrame(timerCallBack);
195
+ }
196
+ },
197
+ /** Convert a date/time to UTC.
198
+ @param tz {number} The hour or minute offset from GMT, e.g. +9, -360.
199
+ @param year {Date|number} the date/time in that timezone or the year in that timezone.
200
+ @param [month] {number} The month (0 - 11) (omit if <code>year</code> is a <code>Date</code>).
201
+ @param [day] {number} The day (omit if <code>year</code> is a <code>Date</code>).
202
+ @param [hours] {number} The hour (omit if <code>year</code> is a <code>Date</code>).
203
+ @param [mins] {number} The minute (omit if <code>year</code> is a <code>Date</code>).
204
+ @param [secs] {number} The second (omit if <code>year</code> is a <code>Date</code>).
205
+ @param [ms] {number} The millisecond (omit if <code>year</code> is a <code>Date</code>).
206
+ @return {Date} The equivalent UTC date/time.
207
+ @example $.countdown.UTCDate(+10, 2013, 12-1, 25, 12, 0)
208
+ $.countdown.UTCDate(-7, new Date(2013, 12-1, 25, 12, 0)) */
209
+ UTCDate: function(tz, year, month, day, hours, mins, secs, ms) {
210
+ if (typeof year == 'object' && year.constructor == Date) {
211
+ ms = year.getMilliseconds();
212
+ secs = year.getSeconds();
213
+ mins = year.getMinutes();
214
+ hours = year.getHours();
215
+ day = year.getDate();
216
+ month = year.getMonth();
217
+ year = year.getFullYear();
218
+ }
219
+ var d = new Date();
220
+ d.setUTCFullYear(year);
221
+ d.setUTCDate(1);
222
+ d.setUTCMonth(month || 0);
223
+ d.setUTCDate(day || 1);
224
+ d.setUTCHours(hours || 0);
225
+ d.setUTCMinutes((mins || 0) - (Math.abs(tz) < 30 ? tz * 60 : tz));
226
+ d.setUTCSeconds(secs || 0);
227
+ d.setUTCMilliseconds(ms || 0);
228
+ return d;
229
+ },
230
+ /** Convert a set of periods into seconds.
231
+ Averaged for months and years.
232
+ @param periods {number[]} The periods per year/month/week/day/hour/minute/second.
233
+ @return {number} The corresponding number of seconds.
234
+ @example var secs = $.countdown.periodsToSeconds(periods) */
235
+ periodsToSeconds: function(periods) {
236
+ return periods[0] * 31557600 + periods[1] * 2629800 + periods[2] * 604800 +
237
+ periods[3] * 86400 + periods[4] * 3600 + periods[5] * 60 + periods[6];
238
+ },
239
+ _instSettings: function(elem, options) {
240
+ return {_periods: [0, 0, 0, 0, 0, 0, 0]};
241
+ },
242
+ /** Add an element to the list of active ones.
243
+ @private
244
+ @param elem {Element} The countdown element. */
245
+ _addElem: function(elem) {
246
+ if (!this._hasElem(elem)) {
247
+ this._timerElems.push(elem);
248
+ }
249
+ },
250
+ /** See if an element is in the list of active ones.
251
+ @private
252
+ @param elem {Element} The countdown element.
253
+ @return {boolean} True if present, false if not. */
254
+ _hasElem: function(elem) {
255
+ return ($.inArray(elem, this._timerElems) > -1);
256
+ },
257
+ /** Remove an element from the list of active ones.
258
+ @private
259
+ @param elem {Element} The countdown element. */
260
+ _removeElem: function(elem) {
261
+ this._timerElems = $.map(this._timerElems,
262
+ function(value) { return (value == elem ? null : value); }); // delete entry
263
+ },
264
+ /** Update each active timer element.
265
+ @private */
266
+ _updateElems: function() {
267
+ for (var i = this._timerElems.length - 1; i >= 0; i--) {
268
+ this._updateCountdown(this._timerElems[i]);
269
+ }
270
+ },
271
+ _optionsChanged: function(elem, inst, options) {
272
+ if (options.layout) {
273
+ options.layout = options.layout.replace(/&lt;/g, '<').replace(/&gt;/g, '>');
274
+ }
275
+ this._resetExtraLabels(inst.options, options);
276
+ var timezoneChanged = (inst.options.timezone != options.timezone);
277
+ $.extend(inst.options, options);
278
+ this._adjustSettings(elem, inst,
279
+ options.until != null || options.since != null || timezoneChanged);
280
+ var now = new Date();
281
+ if ((inst._since && inst._since < now) || (inst._until && inst._until > now)) {
282
+ this._addElem(elem[0]);
283
+ }
284
+ this._updateCountdown(elem, inst);
285
+ },
286
+ /** Redisplay the countdown with an updated display.
287
+ @private
288
+ @param elem {Element|jQuery} The containing division.
289
+ @param inst {object} The current settings for this instance. */
290
+ _updateCountdown: function(elem, inst) {
291
+ elem = elem.jquery ? elem : $(elem);
292
+ inst = inst || elem.data(this.name);
293
+ if (!inst) {
294
+ return;
295
+ }
296
+ elem.html(this._generateHTML(inst)).toggleClass(this._rtlClass, inst.options.isRTL);
297
+ if ($.isFunction(inst.options.onTick)) {
298
+ var periods = inst._hold != 'lap' ? inst._periods :
299
+ this._calculatePeriods(inst, inst._show, inst.options.significant, new Date());
300
+ if (inst.options.tickInterval == 1 ||
301
+ this.periodsToSeconds(periods) % inst.options.tickInterval == 0) {
302
+ inst.options.onTick.apply(elem[0], [periods]);
303
+ }
304
+ }
305
+ var expired = inst._hold != 'pause' &&
306
+ (inst._since ? inst._now.getTime() < inst._since.getTime() :
307
+ inst._now.getTime() >= inst._until.getTime());
308
+ if (expired && !inst._expiring) {
309
+ inst._expiring = true;
310
+ if (this._hasElem(elem[0]) || inst.options.alwaysExpire) {
311
+ this._removeElem(elem[0]);
312
+ if ($.isFunction(inst.options.onExpiry)) {
313
+ inst.options.onExpiry.apply(elem[0], []);
314
+ }
315
+ if (inst.options.expiryText) {
316
+ var layout = inst.options.layout;
317
+ inst.options.layout = inst.options.expiryText;
318
+ this._updateCountdown(elem[0], inst);
319
+ inst.options.layout = layout;
320
+ }
321
+ if (inst.options.expiryUrl) {
322
+ window.location = inst.options.expiryUrl;
323
+ }
324
+ }
325
+ inst._expiring = false;
326
+ }
327
+ else if (inst._hold == 'pause') {
328
+ this._removeElem(elem[0]);
329
+ }
330
+ },
331
+ /** Reset any extra labelsn and compactLabelsn entries if changing labels.
332
+ @private
333
+ @param base {object} The options to be updated.
334
+ @param options {object} The new option values. */
335
+ _resetExtraLabels: function(base, options) {
336
+ var changingLabels = false;
337
+ for (var n in options) {
338
+ if (n != 'whichLabels' && n.match(/[Ll]abels/)) {
339
+ changingLabels = true;
340
+ break;
341
+ }
342
+ }
343
+ if (changingLabels) {
344
+ for (var n in base) { // Remove custom numbered labels
345
+ if (n.match(/[Ll]abels[02-9]|compactLabels1/)) {
346
+ base[n] = null;
347
+ }
348
+ }
349
+ }
350
+ },
351
+ /** Calculate internal settings for an instance.
352
+ @private
353
+ @param elem {jQuery} The containing division.
354
+ @param inst {object} The current settings for this instance.
355
+ @param recalc {boolean} True if until or since are set. */
356
+ _adjustSettings: function(elem, inst, recalc) {
357
+ var now;
358
+ var serverOffset = 0;
359
+ var serverEntry = null;
360
+ for (var i = 0; i < this._serverSyncs.length; i++) {
361
+ if (this._serverSyncs[i][0] == inst.options.serverSync) {
362
+ serverEntry = this._serverSyncs[i][1];
363
+ break;
364
+ }
365
+ }
366
+ if (serverEntry != null) {
367
+ serverOffset = (inst.options.serverSync ? serverEntry : 0);
368
+ now = new Date();
369
+ }
370
+ else {
371
+ var serverResult = ($.isFunction(inst.options.serverSync) ?
372
+ inst.options.serverSync.apply(elem[0], []) : null);
373
+ now = new Date();
374
+ serverOffset = (serverResult ? now.getTime() - serverResult.getTime() : 0);
375
+ this._serverSyncs.push([inst.options.serverSync, serverOffset]);
376
+ }
377
+ var timezone = inst.options.timezone;
378
+ timezone = (timezone == null ? -now.getTimezoneOffset() : timezone);
379
+ if (recalc || (!recalc && inst._until == null && inst._since == null)) {
380
+ inst._since = inst.options.since;
381
+ if (inst._since != null) {
382
+ inst._since = this.UTCDate(timezone, this._determineTime(inst._since, null));
383
+ if (inst._since && serverOffset) {
384
+ inst._since.setMilliseconds(inst._since.getMilliseconds() + serverOffset);
385
+ }
386
+ }
387
+ inst._until = this.UTCDate(timezone, this._determineTime(inst.options.until, now));
388
+ if (serverOffset) {
389
+ inst._until.setMilliseconds(inst._until.getMilliseconds() + serverOffset);
390
+ }
391
+ }
392
+ inst._show = this._determineShow(inst);
393
+ },
394
+ /** Remove the countdown widget from a div.
395
+ @param elem {jQuery} The containing division.
396
+ @param inst {object} The current instance object. */
397
+ _preDestroy: function(elem, inst) {
398
+ this._removeElem(elem[0]);
399
+ elem.empty();
400
+ },
401
+ /** Pause a countdown widget at the current time.
402
+ Stop it running but remember and display the current time.
403
+ @param elem {Element} The containing division.
404
+ @example $(selector).countdown('pause') */
405
+ pause: function(elem) {
406
+ this._hold(elem, 'pause');
407
+ },
408
+ /** Pause a countdown widget at the current time.
409
+ Stop the display but keep the countdown running.
410
+ @param elem {Element} The containing division.
411
+ @example $(selector).countdown('lap') */
412
+ lap: function(elem) {
413
+ this._hold(elem, 'lap');
414
+ },
415
+ /** Resume a paused countdown widget.
416
+ @param elem {Element} The containing division.
417
+ @example $(selector).countdown('resume') */
418
+ resume: function(elem) {
419
+ this._hold(elem, null);
420
+ },
421
+ /** Toggle a paused countdown widget.
422
+ @param elem {Element} The containing division.
423
+ @example $(selector).countdown('toggle') */
424
+ toggle: function(elem) {
425
+ var inst = $.data(elem, this.name) || {};
426
+ this[!inst._hold ? 'pause' : 'resume'](elem);
427
+ },
428
+ /** Toggle a lapped countdown widget.
429
+ @param elem {Element} The containing division.
430
+ @example $(selector).countdown('toggleLap') */
431
+ toggleLap: function(elem) {
432
+ var inst = $.data(elem, this.name) || {};
433
+ this[!inst._hold ? 'lap' : 'resume'](elem);
434
+ },
435
+ /** Pause or resume a countdown widget.
436
+ @private
437
+ @param elem {Element} The containing division.
438
+ @param hold {string} The new hold setting. */
439
+ _hold: function(elem, hold) {
440
+ var inst = $.data(elem, this.name);
441
+ if (inst) {
442
+ if (inst._hold == 'pause' && !hold) {
443
+ inst._periods = inst._savePeriods;
444
+ var sign = (inst._since ? '-' : '+');
445
+ inst[inst._since ? '_since' : '_until'] =
446
+ this._determineTime(sign + inst._periods[0] + 'y' +
447
+ sign + inst._periods[1] + 'o' + sign + inst._periods[2] + 'w' +
448
+ sign + inst._periods[3] + 'd' + sign + inst._periods[4] + 'h' +
449
+ sign + inst._periods[5] + 'm' + sign + inst._periods[6] + 's');
450
+ this._addElem(elem);
451
+ }
452
+ inst._hold = hold;
453
+ inst._savePeriods = (hold == 'pause' ? inst._periods : null);
454
+ $.data(elem, this.name, inst);
455
+ this._updateCountdown(elem, inst);
456
+ }
457
+ },
458
+ /** Return the current time periods.
459
+ @param elem {Element} The containing division.
460
+ @return {number[]} The current periods for the countdown.
461
+ @example var periods = $(selector).countdown('getTimes') */
462
+ getTimes: function(elem) {
463
+ var inst = $.data(elem, this.name);
464
+ return (!inst ? null : (inst._hold == 'pause' ? inst._savePeriods : (!inst._hold ? inst._periods :
465
+ this._calculatePeriods(inst, inst._show, inst.options.significant, new Date()))));
466
+ },
467
+ /** A time may be specified as an exact value or a relative one.
468
+ @private
469
+ @param setting {string|number|Date} The date/time value as a relative or absolute value.
470
+ @param defaultTime {Date} The date/time to use if no other is supplied.
471
+ @return {Date} The corresponding date/time. */
472
+ _determineTime: function(setting, defaultTime) {
473
+ var self = this;
474
+ var offsetNumeric = function(offset) { // e.g. +300, -2
475
+ var time = new Date();
476
+ time.setTime(time.getTime() + offset * 1000);
477
+ return time;
478
+ };
479
+ var offsetString = function(offset) { // e.g. '+2d', '-4w', '+3h +30m'
480
+ offset = offset.toLowerCase();
481
+ var time = new Date();
482
+ var year = time.getFullYear();
483
+ var month = time.getMonth();
484
+ var day = time.getDate();
485
+ var hour = time.getHours();
486
+ var minute = time.getMinutes();
487
+ var second = time.getSeconds();
488
+ var pattern = /([+-]?[0-9]+)\s*(s|m|h|d|w|o|y)?/g;
489
+ var matches = pattern.exec(offset);
490
+ while (matches) {
491
+ switch (matches[2] || 's') {
492
+ case 's': second += parseInt(matches[1], 10); break;
493
+ case 'm': minute += parseInt(matches[1], 10); break;
494
+ case 'h': hour += parseInt(matches[1], 10); break;
495
+ case 'd': day += parseInt(matches[1], 10); break;
496
+ case 'w': day += parseInt(matches[1], 10) * 7; break;
497
+ case 'o':
498
+ month += parseInt(matches[1], 10);
499
+ day = Math.min(day, self._getDaysInMonth(year, month));
500
+ break;
501
+ case 'y':
502
+ year += parseInt(matches[1], 10);
503
+ day = Math.min(day, self._getDaysInMonth(year, month));
504
+ break;
505
+ }
506
+ matches = pattern.exec(offset);
507
+ }
508
+ return new Date(year, month, day, hour, minute, second, 0);
509
+ };
510
+ var time = (setting == null ? defaultTime :
511
+ (typeof setting == 'string' ? offsetString(setting) :
512
+ (typeof setting == 'number' ? offsetNumeric(setting) : setting)));
513
+ if (time) time.setMilliseconds(0);
514
+ return time;
515
+ },
516
+ /** Determine the number of days in a month.
517
+ @private
518
+ @param year {number} The year.
519
+ @param month {number} The month.
520
+ @return {number} The days in that month. */
521
+ _getDaysInMonth: function(year, month) {
522
+ return 32 - new Date(year, month, 32).getDate();
523
+ },
524
+ /** Default implementation to determine which set of labels should be used for an amount.
525
+ Use the <code>labels</code> attribute with the same numeric suffix (if it exists).
526
+ @private
527
+ @param num {number} The amount to be displayed.
528
+ @return {number} The set of labels to be used for this amount. */
529
+ _normalLabels: function(num) {
530
+ return num;
531
+ },
532
+ /** Generate the HTML to display the countdown widget.
533
+ @private
534
+ @param inst {object} The current settings for this instance.
535
+ @return {string} The new HTML for the countdown display. */
536
+ _generateHTML: function(inst) {
537
+ var self = this;
538
+ // Determine what to show
539
+ inst._periods = (inst._hold ? inst._periods :
540
+ this._calculatePeriods(inst, inst._show, inst.options.significant, new Date()));
541
+ // Show all 'asNeeded' after first non-zero value
542
+ var shownNonZero = false;
543
+ var showCount = 0;
544
+ var sigCount = inst.options.significant;
545
+ var show = $.extend({}, inst._show);
546
+ for (var period = Y; period <= S; period++) {
547
+ shownNonZero |= (inst._show[period] == '?' && inst._periods[period] > 0);
548
+ show[period] = (inst._show[period] == '?' && !shownNonZero ? null : inst._show[period]);
549
+ showCount += (show[period] ? 1 : 0);
550
+ sigCount -= (inst._periods[period] > 0 ? 1 : 0);
551
+ }
552
+ var showSignificant = [false, false, false, false, false, false, false];
553
+ for (var period = S; period >= Y; period--) { // Determine significant periods
554
+ if (inst._show[period]) {
555
+ if (inst._periods[period]) {
556
+ showSignificant[period] = true;
557
+ }
558
+ else {
559
+ showSignificant[period] = sigCount > 0;
560
+ sigCount--;
561
+ }
562
+ }
563
+ }
564
+ var labels = (inst.options.compact ? inst.options.compactLabels : inst.options.labels);
565
+ var whichLabels = inst.options.whichLabels || this._normalLabels;
566
+ var showCompact = function(period) {
567
+ var labelsNum = inst.options['compactLabels' + whichLabels(inst._periods[period])];
568
+ return (show[period] ? self._translateDigits(inst, inst._periods[period]) +
569
+ (labelsNum ? labelsNum[period] : labels[period]) + ' ' : '');
570
+ };
571
+ var minDigits = (inst.options.padZeroes ? 2 : 1);
572
+ var showFull = function(period) {
573
+ var labelsNum = inst.options['labels' + whichLabels(inst._periods[period])];
574
+ return ((!inst.options.significant && show[period]) ||
575
+ (inst.options.significant && showSignificant[period]) ?
576
+ '<span class="' + self._sectionClass + '">' +
577
+ //SID EDIT
578
+ '<span class="pre_time-mid">' +
579
+ '<span class="' + self._amountClass + '">' +
580
+ self._minDigits(inst, inst._periods[period], minDigits) + '</span>' +
581
+ '<span class="' + self._periodClass + '">' +
582
+ (labelsNum ? labelsNum[period] : labels[period]) + '</span></span></span>' : '');
583
+ };
584
+ return (inst.options.layout ? this._buildLayout(inst, show, inst.options.layout,
585
+ inst.options.compact, inst.options.significant, showSignificant) :
586
+ ((inst.options.compact ? // Compact version
587
+ '<span class="' + this._rowClass + ' ' + this._amountClass +
588
+ (inst._hold ? ' ' + this._holdingClass : '') + '">' +
589
+ showCompact(Y) + showCompact(O) + showCompact(W) + showCompact(D) +
590
+ (show[H] ? this._minDigits(inst, inst._periods[H], 2) : '') +
591
+ (show[M] ? (show[H] ? inst.options.timeSeparator : '') +
592
+ this._minDigits(inst, inst._periods[M], 2) : '') +
593
+ (show[S] ? (show[H] || show[M] ? inst.options.timeSeparator : '') +
594
+ this._minDigits(inst, inst._periods[S], 2) : '') :
595
+ // Full version
596
+ '<span class="' + this._rowClass + ' ' + this._showClass + (inst.options.significant || showCount) +
597
+ (inst._hold ? ' ' + this._holdingClass : '') + '">' +
598
+ showFull(Y) + showFull(O) + showFull(W) + showFull(D) +
599
+ showFull(H) + showFull(M) + showFull(S)) + '</span>' +
600
+ (inst.options.description ? '<span class="' + this._rowClass + ' ' + this._descrClass + '">' +
601
+ inst.options.description + '</span>' : '')));
602
+ },
603
+ /** Construct a custom layout.
604
+ @private
605
+ @param inst {object} The current settings for this instance.
606
+ @param show {boolean[]} Flags indicating which periods are requested.
607
+ @param layout {string} The customised layout.
608
+ @param compact {boolean} True if using compact labels.
609
+ @param significant {number} The number of periods with values to show, zero for all.
610
+ @param showSignificant {boolean[]} Other periods to show for significance.
611
+ @return {string} The custom HTML. */
612
+ _buildLayout: function(inst, show, layout, compact, significant, showSignificant) {
613
+ var labels = inst.options[compact ? 'compactLabels' : 'labels'];
614
+ var whichLabels = inst.options.whichLabels || this._normalLabels;
615
+ var labelFor = function(index) {
616
+ return (inst.options[(compact ? 'compactLabels' : 'labels') +
617
+ whichLabels(inst._periods[index])] || labels)[index];
618
+ };
619
+ var digit = function(value, position) {
620
+ return inst.options.digits[Math.floor(value / position) % 10];
621
+ };
622
+ var subs = {desc: inst.options.description, sep: inst.options.timeSeparator,
623
+ yl: labelFor(Y), yn: this._minDigits(inst, inst._periods[Y], 1),
624
+ ynn: this._minDigits(inst, inst._periods[Y], 2),
625
+ ynnn: this._minDigits(inst, inst._periods[Y], 3), y1: digit(inst._periods[Y], 1),
626
+ y10: digit(inst._periods[Y], 10), y100: digit(inst._periods[Y], 100),
627
+ y1000: digit(inst._periods[Y], 1000),
628
+ ol: labelFor(O), on: this._minDigits(inst, inst._periods[O], 1),
629
+ onn: this._minDigits(inst, inst._periods[O], 2),
630
+ onnn: this._minDigits(inst, inst._periods[O], 3), o1: digit(inst._periods[O], 1),
631
+ o10: digit(inst._periods[O], 10), o100: digit(inst._periods[O], 100),
632
+ o1000: digit(inst._periods[O], 1000),
633
+ wl: labelFor(W), wn: this._minDigits(inst, inst._periods[W], 1),
634
+ wnn: this._minDigits(inst, inst._periods[W], 2),
635
+ wnnn: this._minDigits(inst, inst._periods[W], 3), w1: digit(inst._periods[W], 1),
636
+ w10: digit(inst._periods[W], 10), w100: digit(inst._periods[W], 100),
637
+ w1000: digit(inst._periods[W], 1000),
638
+ dl: labelFor(D), dn: this._minDigits(inst, inst._periods[D], 1),
639
+ dnn: this._minDigits(inst, inst._periods[D], 2),
640
+ dnnn: this._minDigits(inst, inst._periods[D], 3), d1: digit(inst._periods[D], 1),
641
+ d10: digit(inst._periods[D], 10), d100: digit(inst._periods[D], 100),
642
+ d1000: digit(inst._periods[D], 1000),
643
+ hl: labelFor(H), hn: this._minDigits(inst, inst._periods[H], 1),
644
+ hnn: this._minDigits(inst, inst._periods[H], 2),
645
+ hnnn: this._minDigits(inst, inst._periods[H], 3), h1: digit(inst._periods[H], 1),
646
+ h10: digit(inst._periods[H], 10), h100: digit(inst._periods[H], 100),
647
+ h1000: digit(inst._periods[H], 1000),
648
+ ml: labelFor(M), mn: this._minDigits(inst, inst._periods[M], 1),
649
+ mnn: this._minDigits(inst, inst._periods[M], 2),
650
+ mnnn: this._minDigits(inst, inst._periods[M], 3), m1: digit(inst._periods[M], 1),
651
+ m10: digit(inst._periods[M], 10), m100: digit(inst._periods[M], 100),
652
+ m1000: digit(inst._periods[M], 1000),
653
+ sl: labelFor(S), sn: this._minDigits(inst, inst._periods[S], 1),
654
+ snn: this._minDigits(inst, inst._periods[S], 2),
655
+ snnn: this._minDigits(inst, inst._periods[S], 3), s1: digit(inst._periods[S], 1),
656
+ s10: digit(inst._periods[S], 10), s100: digit(inst._periods[S], 100),
657
+ s1000: digit(inst._periods[S], 1000)};
658
+ var html = layout;
659
+ // Replace period containers: {p<}...{p>}
660
+ for (var i = Y; i <= S; i++) {
661
+ var period = 'yowdhms'.charAt(i);
662
+ var re = new RegExp('\\{' + period + '<\\}([\\s\\S]*)\\{' + period + '>\\}', 'g');
663
+ html = html.replace(re, ((!significant && show[i]) ||
664
+ (significant && showSignificant[i]) ? '$1' : ''));
665
+ }
666
+ // Replace period values: {pn}
667
+ $.each(subs, function(n, v) {
668
+ var re = new RegExp('\\{' + n + '\\}', 'g');
669
+ html = html.replace(re, v);
670
+ });
671
+ return html;
672
+ },
673
+ /** Ensure a numeric value has at least n digits for display.
674
+ @private
675
+ @param inst {object} The current settings for this instance.
676
+ @param value {number} The value to display.
677
+ @param len {number} The minimum length.
678
+ @return {string} The display text. */
679
+ _minDigits: function(inst, value, len) {
680
+ value = '' + value;
681
+ if (value.length >= len) {
682
+ return this._translateDigits(inst, value);
683
+ }
684
+ value = '0000000000' + value;
685
+ return this._translateDigits(inst, value.substr(value.length - len));
686
+ },
687
+ /** Translate digits into other representations.
688
+ @private
689
+ @param inst {object} The current settings for this instance.
690
+ @param value {string} The text to translate.
691
+ @return {string} The translated text. */
692
+ _translateDigits: function(inst, value) {
693
+ return ('' + value).replace(/[0-9]/g, function(digit) {
694
+ return inst.options.digits[digit];
695
+ });
696
+ },
697
+ /** Translate the format into flags for each period.
698
+ @private
699
+ @param inst {object} The current settings for this instance.
700
+ @return {string[]} Flags indicating which periods are requested (?) or
701
+ required (!) by year, month, week, day, hour, minute, second. */
702
+ _determineShow: function(inst) {
703
+ var format = inst.options.format;
704
+ var show = [];
705
+ show[Y] = (format.match('y') ? '?' : (format.match('Y') ? '!' : null));
706
+ show[O] = (format.match('o') ? '?' : (format.match('O') ? '!' : null));
707
+ show[W] = (format.match('w') ? '?' : (format.match('W') ? '!' : null));
708
+ show[D] = (format.match('d') ? '?' : (format.match('D') ? '!' : null));
709
+ show[H] = (format.match('h') ? '?' : (format.match('H') ? '!' : null));
710
+ show[M] = (format.match('m') ? '?' : (format.match('M') ? '!' : null));
711
+ show[S] = (format.match('s') ? '?' : (format.match('S') ? '!' : null));
712
+ return show;
713
+ },
714
+ /** Calculate the requested periods between now and the target time.
715
+ @private
716
+ @param inst {object} The current settings for this instance.
717
+ @param show {string[]} Flags indicating which periods are requested/required.
718
+ @param significant {number} The number of periods with values to show, zero for all.
719
+ @param now {Date} The current date and time.
720
+ @return {number[]} The current time periods (always positive)
721
+ by year, month, week, day, hour, minute, second. */
722
+ _calculatePeriods: function(inst, show, significant, now) {
723
+ // Find endpoints
724
+ inst._now = now;
725
+ inst._now.setMilliseconds(0);
726
+ var until = new Date(inst._now.getTime());
727
+ if (inst._since) {
728
+ if (now.getTime() < inst._since.getTime()) {
729
+ inst._now = now = until;
730
+ }
731
+ else {
732
+ now = inst._since;
733
+ }
734
+ }
735
+ else {
736
+ until.setTime(inst._until.getTime());
737
+ if (now.getTime() > inst._until.getTime()) {
738
+ inst._now = now = until;
739
+ }
740
+ }
741
+ // Calculate differences by period
742
+ var periods = [0, 0, 0, 0, 0, 0, 0];
743
+ if (show[Y] || show[O]) {
744
+ // Treat end of months as the same
745
+ var lastNow = this._getDaysInMonth(now.getFullYear(), now.getMonth());
746
+ var lastUntil = this._getDaysInMonth(until.getFullYear(), until.getMonth());
747
+ var sameDay = (until.getDate() == now.getDate() ||
748
+ (until.getDate() >= Math.min(lastNow, lastUntil) &&
749
+ now.getDate() >= Math.min(lastNow, lastUntil)));
750
+ var getSecs = function(date) {
751
+ return (date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds();
752
+ };
753
+ var months = Math.max(0,
754
+ (until.getFullYear() - now.getFullYear()) * 12 + until.getMonth() - now.getMonth() +
755
+ ((until.getDate() < now.getDate() && !sameDay) ||
756
+ (sameDay && getSecs(until) < getSecs(now)) ? -1 : 0));
757
+ periods[Y] = (show[Y] ? Math.floor(months / 12) : 0);
758
+ periods[O] = (show[O] ? months - periods[Y] * 12 : 0);
759
+ // Adjust for months difference and end of month if necessary
760
+ now = new Date(now.getTime());
761
+ var wasLastDay = (now.getDate() == lastNow);
762
+ var lastDay = this._getDaysInMonth(now.getFullYear() + periods[Y],
763
+ now.getMonth() + periods[O]);
764
+ if (now.getDate() > lastDay) {
765
+ now.setDate(lastDay);
766
+ }
767
+ now.setFullYear(now.getFullYear() + periods[Y]);
768
+ now.setMonth(now.getMonth() + periods[O]);
769
+ if (wasLastDay) {
770
+ now.setDate(lastDay);
771
+ }
772
+ }
773
+ var diff = Math.floor((until.getTime() - now.getTime()) / 1000);
774
+ var extractPeriod = function(period, numSecs) {
775
+ periods[period] = (show[period] ? Math.floor(diff / numSecs) : 0);
776
+ diff -= periods[period] * numSecs;
777
+ };
778
+ extractPeriod(W, 604800);
779
+ extractPeriod(D, 86400);
780
+ extractPeriod(H, 3600);
781
+ extractPeriod(M, 60);
782
+ extractPeriod(S, 1);
783
+ if (diff > 0 && !inst._since) { // Round up if left overs
784
+ var multiplier = [1, 12, 4.3482, 7, 24, 60, 60];
785
+ var lastShown = S;
786
+ var max = 1;
787
+ for (var period = S; period >= Y; period--) {
788
+ if (show[period]) {
789
+ if (periods[lastShown] >= max) {
790
+ periods[lastShown] = 0;
791
+ diff = 1;
792
+ }
793
+ if (diff > 0) {
794
+ periods[period]++;
795
+ diff = 0;
796
+ lastShown = period;
797
+ max = 1;
798
+ }
799
+ }
800
+ max *= multiplier[period];
801
+ }
802
+ }
803
+ if (significant) { // Zero out insignificant periods
804
+ for (var period = Y; period <= S; period++) {
805
+ if (significant && periods[period]) {
806
+ significant--;
807
+ }
808
+ else if (!significant) {
809
+ periods[period] = 0;
810
+ }
811
+ }
812
+ }
813
+ return periods;
814
+ }
815
+ });
816
+ })(jQuery);
assets/js/lib/slickmin.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ _ _ _ _
3
+ ___| (_) ___| | __ (_)___
4
+ / __| | |/ __| |/ / | / __|
5
+ \__ \ | | (__| < _ | \__ \
6
+ |___/_|_|\___|_|\_(_)/ |___/
7
+ |__/
8
+
9
+ Version: 1.6.0
10
+ Author: Ken Wheeler
11
+ Website: http://kenwheeler.github.io
12
+ Docs: http://kenwheeler.github.io/slick
13
+ Repo: http://github.com/kenwheeler/slick
14
+ Issues: http://github.com/kenwheeler/slick/issues
15
+
16
+ */
17
+ !function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('<button type="button" data-role="none" role="button" tabindex="0" />').text(c+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.focussed=!1,e.interrupted=!1,e.hidden="hidden",e.paused=!0,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,d,f),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.registerBreakpoints(),e.init(!0)}var b=0;return c}(),b.prototype.activateADA=function(){var a=this;a.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},b.prototype.addSlide=b.prototype.slickAdd=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),e.options.vertical===!1?d[e.animType]="translate3d("+b+"px, 0px, 0px)":d[e.animType]="translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.getNavTarget=function(){var b=this,c=b.options.asNavFor;return c&&null!==c&&(c=a(c).not(b.$slider)),c},b.prototype.asNavFor=function(b){var c=this,d=c.getNavTarget();null!==d&&"object"==typeof d&&d.each(function(){var c=a(this).slick("getSlick");c.unslicked||c.slideHandler(b,!0)})},b.prototype.applyTransition=function(a){var b=this,c={};b.options.fade===!1?c[b.transitionType]=b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:c[b.transitionType]="opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayClear(),a.slideCount>a.options.slidesToShow&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer)},b.prototype.autoPlayIterator=function(){var a=this,b=a.currentSlide+a.options.slidesToScroll;a.paused||a.interrupted||a.focussed||(a.options.infinite===!1&&(1===a.direction&&a.currentSlide+1===a.slideCount-1?a.direction=0:0===a.direction&&(b=a.currentSlide-a.options.slidesToScroll,a.currentSlide-1===0&&(a.direction=1))),a.slideHandler(b))},b.prototype.buildArrows=function(){var b=this;b.options.arrows===!0&&(b.$prevArrow=a(b.options.prevArrow).addClass("slick-arrow"),b.$nextArrow=a(b.options.nextArrow).addClass("slick-arrow"),b.slideCount>b.options.slidesToShow?(b.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.prependTo(b.options.appendArrows),b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.appendTo(b.options.appendArrows),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):b.$prevArrow.add(b.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(b.$slider.addClass("slick-dotted"),d=a("<ul />").addClass(b.options.dotsClass),c=0;c<=b.getDotCount();c+=1)d.append(a("<li />").append(b.options.customPaging.call(this,b,c)));b.$dots=d.appendTo(b.options.appendDots),b.$dots.find("li").first().addClass("slick-active").attr("aria-hidden","false")}},b.prototype.buildOut=function(){var b=this;b.$slides=b.$slider.children(b.options.slide+":not(.slick-cloned)").addClass("slick-slide"),b.slideCount=b.$slides.length,b.$slides.each(function(b,c){a(c).attr("data-slick-index",b).data("originalStyling",a(c).attr("style")||"")}),b.$slider.addClass("slick-slider"),b.$slideTrack=0===b.slideCount?a('<div class="slick-track"/>').appendTo(b.$slider):b.$slides.wrapAll('<div class="slick-track"/>').parent(),b.$list=b.$slideTrack.wrap('<div aria-live="polite" class="slick-list"/>').parent(),b.$slideTrack.css("opacity",0),(b.options.centerMode===!0||b.options.swipeToSlide===!0)&&(b.options.slidesToScroll=1),a("img[data-lazy]",b.$slider).not("[src]").addClass("slick-loading"),b.setupInfinite(),b.buildArrows(),b.buildDots(),b.updateDots(),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.options.draggable===!0&&b.$list.addClass("draggable")},b.prototype.buildRows=function(){var b,c,d,e,f,g,h,a=this;if(e=document.createDocumentFragment(),g=a.$slider.children(),a.options.rows>1){for(h=a.options.slidesPerRow*a.options.rows,f=Math.ceil(g.length/h),b=0;f>b;b++){var i=document.createElement("div");for(c=0;c<a.options.rows;c++){var j=document.createElement("div");for(d=0;d<a.options.slidesPerRow;d++){var k=b*h+(c*a.options.slidesPerRow+d);g.get(k)&&j.appendChild(g.get(k))}i.appendChild(j)}e.appendChild(i)}a.$slider.empty().append(e),a.$slider.children().children().children().css({width:100/a.options.slidesPerRow+"%",display:"inline-block"})}},b.prototype.checkResponsive=function(b,c){var e,f,g,d=this,h=!1,i=d.$slider.width(),j=window.innerWidth||a(window).width();if("window"===d.respondTo?g=j:"slider"===d.respondTo?g=i:"min"===d.respondTo&&(g=Math.min(j,i)),d.options.responsive&&d.options.responsive.length&&null!==d.options.responsive){f=null;for(e in d.breakpoints)d.breakpoints.hasOwnProperty(e)&&(d.originalSettings.mobileFirst===!1?g<d.breakpoints[e]&&(f=d.breakpoints[e]):g>d.breakpoints[e]&&(f=d.breakpoints[e]));null!==f?null!==d.activeBreakpoint?(f!==d.activeBreakpoint||c)&&(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):null!==d.activeBreakpoint&&(d.activeBreakpoint=null,d.options=d.originalSettings,b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b),h=f),b||h===!1||d.$slider.trigger("breakpoint",[d,h])}},b.prototype.changeSlide=function(b,c){var f,g,h,d=this,e=a(b.currentTarget);switch(e.is("a")&&b.preventDefault(),e.is("li")||(e=e.closest("li")),h=d.slideCount%d.options.slidesToScroll!==0,f=h?0:(d.slideCount-d.currentSlide)%d.options.slidesToScroll,b.data.message){case"previous":g=0===f?d.options.slidesToScroll:d.options.slidesToShow-f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide-g,!1,c);break;case"next":g=0===f?d.options.slidesToScroll:f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide+g,!1,c);break;case"index":var i=0===b.data.index?0:b.data.index||e.index()*d.options.slidesToScroll;d.slideHandler(d.checkNavigable(i),!1,c),e.children().trigger("focus");break;default:return}},b.prototype.checkNavigable=function(a){var c,d,b=this;if(c=b.getNavigableIndexes(),d=0,a>c[c.length-1])a=c[c.length-1];else for(var e in c){if(a<c[e]){a=d;break}d=c[e]}return a},b.prototype.cleanUpEvents=function(){var b=this;b.options.dots&&null!==b.$dots&&a("li",b.$dots).off("click.slick",b.changeSlide).off("mouseenter.slick",a.proxy(b.interrupt,b,!0)).off("mouseleave.slick",a.proxy(b.interrupt,b,!1)),b.$slider.off("focus.slick blur.slick"),b.options.arrows===!0&&b.slideCount>b.options.slidesToShow&&(b.$prevArrow&&b.$prevArrow.off("click.slick",b.changeSlide),b.$nextArrow&&b.$nextArrow.off("click.slick",b.changeSlide)),b.$list.off("touchstart.slick mousedown.slick",b.swipeHandler),b.$list.off("touchmove.slick mousemove.slick",b.swipeHandler),b.$list.off("touchend.slick mouseup.slick",b.swipeHandler),b.$list.off("touchcancel.slick mouseleave.slick",b.swipeHandler),b.$list.off("click.slick",b.clickHandler),a(document).off(b.visibilityChange,b.visibility),b.cleanUpSlideEvents(),b.options.accessibility===!0&&b.$list.off("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().off("click.slick",b.selectHandler),a(window).off("orientationchange.slick.slick-"+b.instanceUid,b.orientationChange),a(window).off("resize.slick.slick-"+b.instanceUid,b.resize),a("[draggable!=true]",b.$slideTrack).off("dragstart",b.preventDefault),a(window).off("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).off("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.cleanUpSlideEvents=function(){var b=this;b.$list.off("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.off("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.cleanUpRows=function(){var b,a=this;a.options.rows>1&&(b=a.$slides.children().children(),b.removeAttr("style"),a.$slider.empty().append(b))},b.prototype.clickHandler=function(a){var b=this;b.shouldClick===!1&&(a.stopImmediatePropagation(),a.stopPropagation(),a.preventDefault())},b.prototype.destroy=function(b){var c=this;c.autoPlayClear(),c.touchObject={},c.cleanUpEvents(),a(".slick-cloned",c.$slider).detach(),c.$dots&&c.$dots.remove(),c.$prevArrow&&c.$prevArrow.length&&(c.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.prevArrow)&&c.$prevArrow.remove()),c.$nextArrow&&c.$nextArrow.length&&(c.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.nextArrow)&&c.$nextArrow.remove()),c.$slides&&(c.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){a(this).attr("style",a(this).data("originalStyling"))}),c.$slideTrack.children(this.options.slide).detach(),c.$slideTrack.detach(),c.$list.detach(),c.$slider.append(c.$slides)),c.cleanUpRows(),c.$slider.removeClass("slick-slider"),c.$slider.removeClass("slick-initialized"),c.$slider.removeClass("slick-dotted"),c.unslicked=!0,b||c.$slider.trigger("destroy",[c])},b.prototype.disableTransition=function(a){var b=this,c={};c[b.transitionType]="",b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.fadeSlide=function(a,b){var c=this;c.cssTransitions===!1?(c.$slides.eq(a).css({zIndex:c.options.zIndex}),c.$slides.eq(a).animate({opacity:1},c.options.speed,c.options.easing,b)):(c.applyTransition(a),c.$slides.eq(a).css({opacity:1,zIndex:c.options.zIndex}),b&&setTimeout(function(){c.disableTransition(a),b.call()},c.options.speed))},b.prototype.fadeSlideOut=function(a){var b=this;b.cssTransitions===!1?b.$slides.eq(a).animate({opacity:0,zIndex:b.options.zIndex-2},b.options.speed,b.options.easing):(b.applyTransition(a),b.$slides.eq(a).css({opacity:0,zIndex:b.options.zIndex-2}))},b.prototype.filterSlides=b.prototype.slickFilter=function(a){var b=this;null!==a&&(b.$slidesCache=b.$slides,b.unload(),b.$slideTrack.children(this.options.slide).detach(),b.$slidesCache.filter(a).appendTo(b.$slideTrack),b.reinit())},b.prototype.focusHandler=function(){var b=this;b.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*:not(.slick-arrow)",function(c){c.stopImmediatePropagation();var d=a(this);setTimeout(function(){b.options.pauseOnFocus&&(b.focussed=d.is(":focus"),b.autoPlay())},0)})},b.prototype.getCurrent=b.prototype.slickCurrentSlide=function(){var a=this;return a.currentSlide},b.prototype.getDotCount=function(){var a=this,b=0,c=0,d=0;if(a.options.infinite===!0)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else if(a.options.centerMode===!0)d=a.slideCount;else if(a.options.asNavFor)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else d=1+Math.ceil((a.slideCount-a.options.slidesToShow)/a.options.slidesToScroll);return d-1},b.prototype.getLeft=function(a){var c,d,f,b=this,e=0;return b.slideOffset=0,d=b.$slides.first().outerHeight(!0),b.options.infinite===!0?(b.slideCount>b.options.slidesToShow&&(b.slideOffset=b.slideWidth*b.options.slidesToShow*-1,e=d*b.options.slidesToShow*-1),b.slideCount%b.options.slidesToScroll!==0&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(a>b.slideCount?(b.slideOffset=(b.options.slidesToShow-(a-b.slideCount))*b.slideWidth*-1,e=(b.options.slidesToShow-(a-b.slideCount))*d*-1):(b.slideOffset=b.slideCount%b.options.slidesToScroll*b.slideWidth*-1,e=b.slideCount%b.options.slidesToScroll*d*-1))):a+b.options.slidesToShow>b.slideCount&&(b.slideOffset=(a+b.options.slidesToShow-b.slideCount)*b.slideWidth,e=(a+b.options.slidesToShow-b.slideCount)*d),b.slideCount<=b.options.slidesToShow&&(b.slideOffset=0,e=0),b.options.centerMode===!0&&b.options.infinite===!0?b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)-b.slideWidth:b.options.centerMode===!0&&(b.slideOffset=0,b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)),c=b.options.vertical===!1?a*b.slideWidth*-1+b.slideOffset:a*d*-1+e,b.options.variableWidth===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,b.options.centerMode===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow+1),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,c+=(b.$list.width()-f.outerWidth())/2)),c},b.prototype.getOption=b.prototype.slickGetOption=function(a){var b=this;return b.options[a]},b.prototype.getNavigableIndexes=function(){var e,a=this,b=0,c=0,d=[];for(a.options.infinite===!1?e=a.slideCount:(b=-1*a.options.slidesToScroll,c=-1*a.options.slidesToScroll,e=2*a.slideCount);e>b;)d.push(b),b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;return d},b.prototype.getSlick=function(){return this},b.prototype.getSlideCount=function(){var c,d,e,b=this;return e=b.options.centerMode===!0?b.slideWidth*Math.floor(b.options.slidesToShow/2):0,b.options.swipeToSlide===!0?(b.$slideTrack.find(".slick-slide").each(function(c,f){return f.offsetLeft-e+a(f).outerWidth()/2>-1*b.swipeLeft?(d=f,!1):void 0}),c=Math.abs(a(d).attr("data-slick-index")-b.currentSlide)||1):b.options.slidesToScroll},b.prototype.goTo=b.prototype.slickGoTo=function(a,b){var c=this;c.changeSlide({data:{message:"index",index:parseInt(a)}},b)},b.prototype.init=function(b){var c=this;a(c.$slider).hasClass("slick-initialized")||(a(c.$slider).addClass("slick-initialized"),c.buildRows(),c.buildOut(),c.setProps(),c.startLoad(),c.loadSlider(),c.initializeEvents(),c.updateArrows(),c.updateDots(),c.checkResponsive(!0),c.focusHandler()),b&&c.$slider.trigger("init",[c]),c.options.accessibility===!0&&c.initADA(),c.options.autoplay&&(c.paused=!1,c.autoPlay())},b.prototype.initADA=function(){var b=this;b.$slides.add(b.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),b.$slideTrack.attr("role","listbox"),b.$slides.not(b.$slideTrack.find(".slick-cloned")).each(function(c){a(this).attr({role:"option","aria-describedby":"slick-slide"+b.instanceUid+c})}),null!==b.$dots&&b.$dots.attr("role","tablist").find("li").each(function(c){a(this).attr({role:"presentation","aria-selected":"false","aria-controls":"navigation"+b.instanceUid+c,id:"slick-slide"+b.instanceUid+c})}).first().attr("aria-selected","true").end().find("button").attr("role","button").end().closest("div").attr("role","toolbar"),b.activateADA()},b.prototype.initArrowEvents=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},a.changeSlide),a.$nextArrow.off("click.slick").on("click.slick",{message:"next"},a.changeSlide))},b.prototype.initDotEvents=function(){var b=this;b.options.dots===!0&&b.slideCount>b.options.slidesToShow&&a("li",b.$dots).on("click.slick",{message:"index"},b.changeSlide),b.options.dots===!0&&b.options.pauseOnDotsHover===!0&&a("li",b.$dots).on("mouseenter.slick",a.proxy(b.interrupt,b,!0)).on("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.initSlideEvents=function(){var b=this;b.options.pauseOnHover&&(b.$list.on("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.on("mouseleave.slick",a.proxy(b.interrupt,b,!1)))},b.prototype.initializeEvents=function(){var b=this;b.initArrowEvents(),b.initDotEvents(),b.initSlideEvents(),b.$list.on("touchstart.slick mousedown.slick",{action:"start"},b.swipeHandler),b.$list.on("touchmove.slick mousemove.slick",{action:"move"},b.swipeHandler),b.$list.on("touchend.slick mouseup.slick",{action:"end"},b.swipeHandler),b.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},b.swipeHandler),b.$list.on("click.slick",b.clickHandler),a(document).on(b.visibilityChange,a.proxy(b.visibility,b)),b.options.accessibility===!0&&b.$list.on("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),a(window).on("orientationchange.slick.slick-"+b.instanceUid,a.proxy(b.orientationChange,b)),a(window).on("resize.slick.slick-"+b.instanceUid,a.proxy(b.resize,b)),a("[draggable!=true]",b.$slideTrack).on("dragstart",b.preventDefault),a(window).on("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).on("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.initUI=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.show(),a.$nextArrow.show()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.show()},b.prototype.keyHandler=function(a){var b=this;a.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===a.keyCode&&b.options.accessibility===!0?b.changeSlide({data:{message:b.options.rtl===!0?"next":"previous"}}):39===a.keyCode&&b.options.accessibility===!0&&b.changeSlide({data:{message:b.options.rtl===!0?"previous":"next"}}))},b.prototype.lazyLoad=function(){function g(c){a("img[data-lazy]",c).each(function(){var c=a(this),d=a(this).attr("data-lazy"),e=document.createElement("img");e.onload=function(){c.animate({opacity:0},100,function(){c.attr("src",d).animate({opacity:1},200,function(){c.removeAttr("data-lazy").removeClass("slick-loading")}),b.$slider.trigger("lazyLoaded",[b,c,d])})},e.onerror=function(){c.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),b.$slider.trigger("lazyLoadError",[b,c,d])},e.src=d})}var c,d,e,f,b=this;b.options.centerMode===!0?b.options.infinite===!0?(e=b.currentSlide+(b.options.slidesToShow/2+1),f=e+b.options.slidesToShow+2):(e=Math.max(0,b.currentSlide-(b.options.slidesToShow/2+1)),f=2+(b.options.slidesToShow/2+1)+b.currentSlide):(e=b.options.infinite?b.options.slidesToShow+b.currentSlide:b.currentSlide,f=Math.ceil(e+b.options.slidesToShow),b.options.fade===!0&&(e>0&&e--,f<=b.slideCount&&f++)),c=b.$slider.find(".slick-slide").slice(e,f),g(c),b.slideCount<=b.options.slidesToShow?(d=b.$slider.find(".slick-slide"),g(d)):b.currentSlide>=b.slideCount-b.options.slidesToShow?(d=b.$slider.find(".slick-cloned").slice(0,b.options.slidesToShow),g(d)):0===b.currentSlide&&(d=b.$slider.find(".slick-cloned").slice(-1*b.options.slidesToShow),g(d))},b.prototype.loadSlider=function(){var a=this;a.setPosition(),a.$slideTrack.css({opacity:1}),a.$slider.removeClass("slick-loading"),a.initUI(),"progressive"===a.options.lazyLoad&&a.progressiveLazyLoad()},b.prototype.next=b.prototype.slickNext=function(){var a=this;a.changeSlide({data:{message:"next"}})},b.prototype.orientationChange=function(){var a=this;a.checkResponsive(),a.setPosition()},b.prototype.pause=b.prototype.slickPause=function(){var a=this;a.autoPlayClear(),a.paused=!0},b.prototype.play=b.prototype.slickPlay=function(){var a=this;a.autoPlay(),a.options.autoplay=!0,a.paused=!1,a.focussed=!1,a.interrupted=!1},b.prototype.postSlide=function(a){var b=this;b.unslicked||(b.$slider.trigger("afterChange",[b,a]),b.animating=!1,b.setPosition(),b.swipeLeft=null,b.options.autoplay&&b.autoPlay(),b.options.accessibility===!0&&b.initADA())},b.prototype.prev=b.prototype.slickPrev=function(){var a=this;a.changeSlide({data:{message:"previous"}})},b.prototype.preventDefault=function(a){a.preventDefault()},b.prototype.progressiveLazyLoad=function(b){b=b||1;var e,f,g,c=this,d=a("img[data-lazy]",c.$slider);d.length?(e=d.first(),f=e.attr("data-lazy"),g=document.createElement("img"),g.onload=function(){e.attr("src",f).removeAttr("data-lazy").removeClass("slick-loading"),c.options.adaptiveHeight===!0&&c.setPosition(),c.$slider.trigger("lazyLoaded",[c,e,f]),c.progressiveLazyLoad()},g.onerror=function(){3>b?setTimeout(function(){c.progressiveLazyLoad(b+1)},500):(e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),c.$slider.trigger("lazyLoadError",[c,e,f]),c.progressiveLazyLoad())},g.src=f):c.$slider.trigger("allImagesLoaded",[c])},b.prototype.refresh=function(b){var d,e,c=this;e=c.slideCount-c.options.slidesToShow,!c.options.infinite&&c.currentSlide>e&&(c.currentSlide=e),c.slideCount<=c.options.slidesToShow&&(c.currentSlide=0),d=c.currentSlide,c.destroy(!0),a.extend(c,c.initials,{currentSlide:d}),c.init(),b||c.changeSlide({data:{message:"index",index:d}},!1)},b.prototype.registerBreakpoints=function(){var c,d,e,b=this,f=b.options.responsive||null;if("array"===a.type(f)&&f.length){b.respondTo=b.options.respondTo||"window";for(c in f)if(e=b.breakpoints.length-1,d=f[c].breakpoint,f.hasOwnProperty(c)){for(;e>=0;)b.breakpoints[e]&&b.breakpoints[e]===d&&b.breakpoints.splice(e,1),e--;b.breakpoints.push(d),b.breakpointSettings[d]=f[c].settings}b.breakpoints.sort(function(a,c){return b.options.mobileFirst?a-c:c-a})}},b.prototype.reinit=function(){var b=this;b.$slides=b.$slideTrack.children(b.options.slide).addClass("slick-slide"),b.slideCount=b.$slides.length,b.currentSlide>=b.slideCount&&0!==b.currentSlide&&(b.currentSlide=b.currentSlide-b.options.slidesToScroll),b.slideCount<=b.options.slidesToShow&&(b.currentSlide=0),b.registerBreakpoints(),b.setProps(),b.setupInfinite(),b.buildArrows(),b.updateArrows(),b.initArrowEvents(),b.buildDots(),b.updateDots(),b.initDotEvents(),b.cleanUpSlideEvents(),b.initSlideEvents(),b.checkResponsive(!1,!0),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.setPosition(),b.focusHandler(),b.paused=!b.options.autoplay,b.autoPlay(),b.$slider.trigger("reInit",[b])},b.prototype.resize=function(){var b=this;a(window).width()!==b.windowWidth&&(clearTimeout(b.windowDelay),b.windowDelay=window.setTimeout(function(){b.windowWidth=a(window).width(),b.checkResponsive(),b.unslicked||b.setPosition()},50))},b.prototype.removeSlide=b.prototype.slickRemove=function(a,b,c){var d=this;return"boolean"==typeof a?(b=a,a=b===!0?0:d.slideCount-1):a=b===!0?--a:a,d.slideCount<1||0>a||a>d.slideCount-1?!1:(d.unload(),c===!0?d.$slideTrack.children().remove():d.$slideTrack.children(this.options.slide).eq(a).remove(),d.$slides=d.$slideTrack.children(this.options.slide),d.$slideTrack.children(this.options.slide).detach(),d.$slideTrack.append(d.$slides),d.$slidesCache=d.$slides,void d.reinit())},b.prototype.setCSS=function(a){var d,e,b=this,c={};b.options.rtl===!0&&(a=-a),d="left"==b.positionProp?Math.ceil(a)+"px":"0px",e="top"==b.positionProp?Math.ceil(a)+"px":"0px",c[b.positionProp]=a,b.transformsEnabled===!1?b.$slideTrack.css(c):(c={},b.cssTransitions===!1?(c[b.animType]="translate("+d+", "+e+")",b.$slideTrack.css(c)):(c[b.animType]="translate3d("+d+", "+e+", 0px)",b.$slideTrack.css(c)))},b.prototype.setDimensions=function(){var a=this;a.options.vertical===!1?a.options.centerMode===!0&&a.$list.css({padding:"0px "+a.options.centerPadding}):(a.$list.height(a.$slides.first().outerHeight(!0)*a.options.slidesToShow),a.options.centerMode===!0&&a.$list.css({padding:a.options.centerPadding+" 0px"})),a.listWidth=a.$list.width(),a.listHeight=a.$list.height(),a.options.vertical===!1&&a.options.variableWidth===!1?(a.slideWidth=Math.ceil(a.listWidth/a.options.slidesToShow),a.$slideTrack.width(Math.ceil(a.slideWidth*a.$slideTrack.children(".slick-slide").length))):a.options.variableWidth===!0?a.$slideTrack.width(5e3*a.slideCount):(a.slideWidth=Math.ceil(a.listWidth),a.$slideTrack.height(Math.ceil(a.$slides.first().outerHeight(!0)*a.$slideTrack.children(".slick-slide").length)));var b=a.$slides.first().outerWidth(!0)-a.$slides.first().width();a.options.variableWidth===!1&&a.$slideTrack.children(".slick-slide").width(a.slideWidth-b)},b.prototype.setFade=function(){var c,b=this;b.$slides.each(function(d,e){c=b.slideWidth*d*-1,b.options.rtl===!0?a(e).css({position:"relative",right:c,top:0,zIndex:b.options.zIndex-2,opacity:0}):a(e).css({position:"relative",left:c,top:0,zIndex:b.options.zIndex-2,opacity:0})}),b.$slides.eq(b.currentSlide).css({zIndex:b.options.zIndex-1,opacity:1})},b.prototype.setHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.css("height",b)}},b.prototype.setOption=b.prototype.slickSetOption=function(){var c,d,e,f,h,b=this,g=!1;if("object"===a.type(arguments[0])?(e=arguments[0],g=arguments[1],h="multiple"):"string"===a.type(arguments[0])&&(e=arguments[0],f=arguments[1],g=arguments[2],"responsive"===arguments[0]&&"array"===a.type(arguments[1])?h="responsive":"undefined"!=typeof arguments[1]&&(h="single")),"single"===h)b.options[e]=f;else if("multiple"===h)a.each(e,function(a,c){b.options[a]=c});else if("responsive"===h)for(d in f)if("array"!==a.type(b.options.responsive))b.options.responsive=[f[d]];else{for(c=b.options.responsive.length-1;c>=0;)b.options.responsive[c].breakpoint===f[d].breakpoint&&b.options.responsive.splice(c,1),c--;b.options.responsive.push(f[d])}g&&(b.unload(),b.reinit())},b.prototype.setPosition=function(){var a=this;a.setDimensions(),a.setHeight(),a.options.fade===!1?a.setCSS(a.getLeft(a.currentSlide)):a.setFade(),a.$slider.trigger("setPosition",[a])},b.prototype.setProps=function(){var a=this,b=document.body.style;a.positionProp=a.options.vertical===!0?"top":"left","top"===a.positionProp?a.$slider.addClass("slick-vertical"):a.$slider.removeClass("slick-vertical"),(void 0!==b.WebkitTransition||void 0!==b.MozTransition||void 0!==b.msTransition)&&a.options.useCSS===!0&&(a.cssTransitions=!0),a.options.fade&&("number"==typeof a.options.zIndex?a.options.zIndex<3&&(a.options.zIndex=3):a.options.zIndex=a.defaults.zIndex),void 0!==b.OTransform&&(a.animType="OTransform",a.transformType="-o-transform",a.transitionType="OTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.MozTransform&&(a.animType="MozTransform",a.transformType="-moz-transform",a.transitionType="MozTransition",void 0===b.perspectiveProperty&&void 0===b.MozPerspective&&(a.animType=!1)),void 0!==b.webkitTransform&&(a.animType="webkitTransform",a.transformType="-webkit-transform",a.transitionType="webkitTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.msTransform&&(a.animType="msTransform",a.transformType="-ms-transform",a.transitionType="msTransition",void 0===b.msTransform&&(a.animType=!1)),void 0!==b.transform&&a.animType!==!1&&(a.animType="transform",a.transformType="transform",a.transitionType="transition"),a.transformsEnabled=a.options.useTransform&&null!==a.animType&&a.animType!==!1},b.prototype.setSlideClasses=function(a){var c,d,e,f,b=this;d=b.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),b.$slides.eq(a).addClass("slick-current"),b.options.centerMode===!0?(c=Math.floor(b.options.slidesToShow/2),b.options.infinite===!0&&(a>=c&&a<=b.slideCount-1-c?b.$slides.slice(a-c,a+c+1).addClass("slick-active").attr("aria-hidden","false"):(e=b.options.slidesToShow+a,
18
+ d.slice(e-c+1,e+c+2).addClass("slick-active").attr("aria-hidden","false")),0===a?d.eq(d.length-1-b.options.slidesToShow).addClass("slick-center"):a===b.slideCount-1&&d.eq(b.options.slidesToShow).addClass("slick-center")),b.$slides.eq(a).addClass("slick-center")):a>=0&&a<=b.slideCount-b.options.slidesToShow?b.$slides.slice(a,a+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):d.length<=b.options.slidesToShow?d.addClass("slick-active").attr("aria-hidden","false"):(f=b.slideCount%b.options.slidesToShow,e=b.options.infinite===!0?b.options.slidesToShow+a:a,b.options.slidesToShow==b.options.slidesToScroll&&b.slideCount-a<b.options.slidesToShow?d.slice(e-(b.options.slidesToShow-f),e+f).addClass("slick-active").attr("aria-hidden","false"):d.slice(e,e+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false")),"ondemand"===b.options.lazyLoad&&b.lazyLoad()},b.prototype.setupInfinite=function(){var c,d,e,b=this;if(b.options.fade===!0&&(b.options.centerMode=!1),b.options.infinite===!0&&b.options.fade===!1&&(d=null,b.slideCount>b.options.slidesToShow)){for(e=b.options.centerMode===!0?b.options.slidesToShow+1:b.options.slidesToShow,c=b.slideCount;c>b.slideCount-e;c-=1)d=c-1,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d-b.slideCount).prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d+b.slideCount).appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.interrupt=function(a){var b=this;a||b.autoPlay(),b.interrupted=a},b.prototype.selectHandler=function(b){var c=this,d=a(b.target).is(".slick-slide")?a(b.target):a(b.target).parents(".slick-slide"),e=parseInt(d.attr("data-slick-index"));return e||(e=0),c.slideCount<=c.options.slidesToShow?(c.setSlideClasses(e),void c.asNavFor(e)):void c.slideHandler(e)},b.prototype.slideHandler=function(a,b,c){var d,e,f,g,j,h=null,i=this;return b=b||!1,i.animating===!0&&i.options.waitForAnimate===!0||i.options.fade===!0&&i.currentSlide===a||i.slideCount<=i.options.slidesToShow?void 0:(b===!1&&i.asNavFor(a),d=a,h=i.getLeft(d),g=i.getLeft(i.currentSlide),i.currentLeft=null===i.swipeLeft?g:i.swipeLeft,i.options.infinite===!1&&i.options.centerMode===!1&&(0>a||a>i.getDotCount()*i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):i.options.infinite===!1&&i.options.centerMode===!0&&(0>a||a>i.slideCount-i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):(i.options.autoplay&&clearInterval(i.autoPlayTimer),e=0>d?i.slideCount%i.options.slidesToScroll!==0?i.slideCount-i.slideCount%i.options.slidesToScroll:i.slideCount+d:d>=i.slideCount?i.slideCount%i.options.slidesToScroll!==0?0:d-i.slideCount:d,i.animating=!0,i.$slider.trigger("beforeChange",[i,i.currentSlide,e]),f=i.currentSlide,i.currentSlide=e,i.setSlideClasses(i.currentSlide),i.options.asNavFor&&(j=i.getNavTarget(),j=j.slick("getSlick"),j.slideCount<=j.options.slidesToShow&&j.setSlideClasses(i.currentSlide)),i.updateDots(),i.updateArrows(),i.options.fade===!0?(c!==!0?(i.fadeSlideOut(f),i.fadeSlide(e,function(){i.postSlide(e)})):i.postSlide(e),void i.animateHeight()):void(c!==!0?i.animateSlide(h,function(){i.postSlide(e)}):i.postSlide(e))))},b.prototype.startLoad=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.hide(),a.$nextArrow.hide()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.hide(),a.$slider.addClass("slick-loading")},b.prototype.swipeDirection=function(){var a,b,c,d,e=this;return a=e.touchObject.startX-e.touchObject.curX,b=e.touchObject.startY-e.touchObject.curY,c=Math.atan2(b,a),d=Math.round(180*c/Math.PI),0>d&&(d=360-Math.abs(d)),45>=d&&d>=0?e.options.rtl===!1?"left":"right":360>=d&&d>=315?e.options.rtl===!1?"left":"right":d>=135&&225>=d?e.options.rtl===!1?"right":"left":e.options.verticalSwiping===!0?d>=35&&135>=d?"down":"up":"vertical"},b.prototype.swipeEnd=function(a){var c,d,b=this;if(b.dragging=!1,b.interrupted=!1,b.shouldClick=b.touchObject.swipeLength>10?!1:!0,void 0===b.touchObject.curX)return!1;if(b.touchObject.edgeHit===!0&&b.$slider.trigger("edge",[b,b.swipeDirection()]),b.touchObject.swipeLength>=b.touchObject.minSwipe){switch(d=b.swipeDirection()){case"left":case"down":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide+b.getSlideCount()):b.currentSlide+b.getSlideCount(),b.currentDirection=0;break;case"right":case"up":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide-b.getSlideCount()):b.currentSlide-b.getSlideCount(),b.currentDirection=1}"vertical"!=d&&(b.slideHandler(c),b.touchObject={},b.$slider.trigger("swipe",[b,d]))}else b.touchObject.startX!==b.touchObject.curX&&(b.slideHandler(b.currentSlide),b.touchObject={})},b.prototype.swipeHandler=function(a){var b=this;if(!(b.options.swipe===!1||"ontouchend"in document&&b.options.swipe===!1||b.options.draggable===!1&&-1!==a.type.indexOf("mouse")))switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,b.options.verticalSwiping===!0&&(b.touchObject.minSwipe=b.listHeight/b.options.touchThreshold),a.data.action){case"start":b.swipeStart(a);break;case"move":b.swipeMove(a);break;case"end":b.swipeEnd(a)}},b.prototype.swipeMove=function(a){var d,e,f,g,h,b=this;return h=void 0!==a.originalEvent?a.originalEvent.touches:null,!b.dragging||h&&1!==h.length?!1:(d=b.getLeft(b.currentSlide),b.touchObject.curX=void 0!==h?h[0].pageX:a.clientX,b.touchObject.curY=void 0!==h?h[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),b.options.verticalSwiping===!0&&(b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curY-b.touchObject.startY,2)))),e=b.swipeDirection(),"vertical"!==e?(void 0!==a.originalEvent&&b.touchObject.swipeLength>4&&a.preventDefault(),g=(b.options.rtl===!1?1:-1)*(b.touchObject.curX>b.touchObject.startX?1:-1),b.options.verticalSwiping===!0&&(g=b.touchObject.curY>b.touchObject.startY?1:-1),f=b.touchObject.swipeLength,b.touchObject.edgeHit=!1,b.options.infinite===!1&&(0===b.currentSlide&&"right"===e||b.currentSlide>=b.getDotCount()&&"left"===e)&&(f=b.touchObject.swipeLength*b.options.edgeFriction,b.touchObject.edgeHit=!0),b.options.vertical===!1?b.swipeLeft=d+f*g:b.swipeLeft=d+f*(b.$list.height()/b.listWidth)*g,b.options.verticalSwiping===!0&&(b.swipeLeft=d+f*g),b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):void b.setCSS(b.swipeLeft)):void 0)},b.prototype.swipeStart=function(a){var c,b=this;return b.interrupted=!0,1!==b.touchObject.fingerCount||b.slideCount<=b.options.slidesToShow?(b.touchObject={},!1):(void 0!==a.originalEvent&&void 0!==a.originalEvent.touches&&(c=a.originalEvent.touches[0]),b.touchObject.startX=b.touchObject.curX=void 0!==c?c.pageX:a.clientX,b.touchObject.startY=b.touchObject.curY=void 0!==c?c.pageY:a.clientY,void(b.dragging=!0))},b.prototype.unfilterSlides=b.prototype.slickUnfilter=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).detach(),a.$slidesCache.appendTo(a.$slideTrack),a.reinit())},b.prototype.unload=function(){var b=this;a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.remove(),b.$nextArrow&&b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.remove(),b.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},b.prototype.unslick=function(a){var b=this;b.$slider.trigger("unslick",[b,a]),b.destroy()},b.prototype.updateArrows=function(){var b,a=this;b=Math.floor(a.options.slidesToShow/2),a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&!a.options.infinite&&(a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&a.options.centerMode===!1?(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-1&&a.options.centerMode===!0&&(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active").attr("aria-hidden","true"),a.$dots.find("li").eq(Math.floor(a.currentSlide/a.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden","false"))},b.prototype.visibility=function(){var a=this;a.options.autoplay&&(document[a.hidden]?a.interrupted=!0:a.interrupted=!1)},a.fn.slick=function(){var f,g,a=this,c=arguments[0],d=Array.prototype.slice.call(arguments,1),e=a.length;for(f=0;e>f;f++)if("object"==typeof c||"undefined"==typeof c?a[f].slick=new b(a[f],c):g=a[f].slick[c].apply(a[f].slick,d),"undefined"!=typeof g)return g;return a}});
assets/js/lib/typedmin.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /* https://github.com/mattboldt/typed.js/ */
2
+ !function(t,s,e){"use strict";var i=function(t,s){var i=this;this.el=t,this.options={},Object.keys(r).forEach(function(t){i.options[t]=r[t]}),Object.keys(s).forEach(function(t){i.options[t]=s[t]}),this.isInput="input"===this.el.tagName.toLowerCase(),this.attr=this.options.attr,this.showCursor=!this.isInput&&this.options.showCursor,this.elContent=this.attr?this.el.getAttribute(this.attr):this.el.textContent,this.contentType=this.options.contentType,this.typeSpeed=this.options.typeSpeed,this.startDelay=this.options.startDelay,this.backSpeed=this.options.backSpeed,this.backDelay=this.options.backDelay,e&&this.options.stringsElement instanceof e?this.stringsElement=this.options.stringsElement[0]:this.stringsElement=this.options.stringsElement,this.strings=this.options.strings,this.strPos=0,this.arrayPos=0,this.stopNum=0,this.loop=this.options.loop,this.loopCount=this.options.loopCount,this.curLoop=0,this.stop=!1,this.cursorChar=this.options.cursorChar,this.shuffle=this.options.shuffle,this.sequence=[],this.build()};i.prototype={constructor:i,init:function(){var t=this;t.timeout=setTimeout(function(){for(var s=0;s<t.strings.length;++s)t.sequence[s]=s;t.shuffle&&(t.sequence=t.shuffleArray(t.sequence)),t.typewrite(t.strings[t.sequence[t.arrayPos]],t.strPos)},t.startDelay)},build:function(){var t=this;if(this.showCursor===!0&&(this.cursor=s.createElement("span"),this.cursor.className="typed-cursor",this.cursor.innerHTML=this.cursorChar,this.el.parentNode&&this.el.parentNode.insertBefore(this.cursor,this.el.nextSibling)),this.stringsElement){this.strings=[],this.stringsElement.style.display="none";var e=Array.prototype.slice.apply(this.stringsElement.children);e.forEach(function(s){t.strings.push(s.innerHTML)})}this.init()},typewrite:function(t,s){if(this.stop!==!0){var e=Math.round(70*Math.random())+this.typeSpeed,i=this;i.timeout=setTimeout(function(){var e=0,r=t.substr(s);if("^"===r.charAt(0)){var o=1;/^\^\d+/.test(r)&&(r=/\d+/.exec(r)[0],o+=r.length,e=parseInt(r)),t=t.substring(0,s)+t.substring(s+o)}if("html"===i.contentType){var n=t.substr(s).charAt(0);if("<"===n||"&"===n){var a="",h="";for(h="<"===n?">":";";t.substr(s+1).charAt(0)!==h&&(a+=t.substr(s).charAt(0),s++,!(s+1>t.length)););s++,a+=h}}i.timeout=setTimeout(function(){if(s===t.length){if(i.options.onStringTyped(i.arrayPos),i.arrayPos===i.strings.length-1&&(i.options.callback(),i.curLoop++,i.loop===!1||i.curLoop===i.loopCount))return;i.timeout=setTimeout(function(){i.backspace(t,s)},i.backDelay)}else{0===s&&i.options.preStringTyped(i.arrayPos);var e=t.substr(0,s+1);i.attr?i.el.setAttribute(i.attr,e):i.isInput?i.el.value=e:"html"===i.contentType?i.el.innerHTML=e:i.el.textContent=e,s++,i.typewrite(t,s)}},e)},e)}},backspace:function(t,s){if(this.stop!==!0){var e=Math.round(70*Math.random())+this.backSpeed,i=this;i.timeout=setTimeout(function(){if("html"===i.contentType&&">"===t.substr(s).charAt(0)){for(var e="";"<"!==t.substr(s-1).charAt(0)&&(e-=t.substr(s).charAt(0),s--,!(s<0)););s--,e+="<"}var r=t.substr(0,s);i.attr?i.el.setAttribute(i.attr,r):i.isInput?i.el.value=r:"html"===i.contentType?i.el.innerHTML=r:i.el.textContent=r,s>i.stopNum?(s--,i.backspace(t,s)):s<=i.stopNum&&(i.arrayPos++,i.arrayPos===i.strings.length?(i.arrayPos=0,i.shuffle&&(i.sequence=i.shuffleArray(i.sequence)),i.init()):i.typewrite(i.strings[i.sequence[i.arrayPos]],s))},e)}},shuffleArray:function(t){var s,e,i=t.length;if(i)for(;--i;)e=Math.floor(Math.random()*(i+1)),s=t[e],t[e]=t[i],t[i]=s;return t},reset:function(){var t=this;clearInterval(t.timeout);this.el.getAttribute("id");this.el.textContent="","undefined"!=typeof this.cursor&&"undefined"!=typeof this.cursor.parentNode&&this.cursor.parentNode.removeChild(this.cursor),this.strPos=0,this.arrayPos=0,this.curLoop=0,this.options.resetCallback()}},i["new"]=function(t,e){var r=Array.prototype.slice.apply(s.querySelectorAll(t));r.forEach(function(t){var s=t._typed,r="object"==typeof e&&e;s&&s.reset(),t._typed=s=new i(t,r),"string"==typeof e&&s[e]()})},e&&(e.fn.typed=function(t){return this.each(function(){var s=e(this),r=s.data("typed"),o="object"==typeof t&&t;r&&r.reset(),s.data("typed",r=new i(this,o)),"string"==typeof t&&r[t]()})}),t.Typed=i;var r={strings:["These are the default values...","You know what you should do?","Use your own!","Have a great day!"],stringsElement:null,typeSpeed:0,startDelay:0,backSpeed:0,shuffle:!1,backDelay:500,loop:!1,loopCount:!1,showCursor:!0,cursorChar:"|",attr:null,contentType:"html",callback:function(){},preStringTyped:function(){},onStringTyped:function(){},resetCallback:function(){}}}(window,document,window.jQuery);
3
+
assets/js/premium-addons.js ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*****
2
+ * Progress Bar
3
+ */
4
+
5
+ jQuery(function($){
6
+ $(document).ready(function(){
7
+ var i = 0;
8
+ $(".premium-progressbar-progress-bar").css('width','0');
9
+ var number_of_progress_bars = $(".premium-progressbar-progress-bar").length;
10
+ for(;;){if(i >= number_of_progress_bars){break;} scrollFunction(i); i = i + 1;}
11
+ });
12
+ });
13
+
14
+
15
+ function scrollFunction(progressBar){
16
+ jQuery(function($){$(document).scroll(function(){
17
+ if( $(this).scrollTop() >= $(".premium-progressbar-progress:eq(" + progressBar+ ")").offset().top - 600 ){
18
+ $(".premium-progressbar-progress-bar:eq("+progressBar+")").animate({
19
+ width: $(".premium-progressbar-progress-bar:eq("+progressBar+")").attr('aria-valuenow') + '%'
20
+ },1000);
21
+ }
22
+ });
23
+ });
24
+ };
25
+
elementor-helper.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+
5
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
6
+
7
+
8
+ /**
9
+ * premium_Templat_Tags class defines all the query of options of select box
10
+ *
11
+ * Setting up the helper assets of the premium widgets
12
+ *
13
+ * @since 1.0
14
+ */
15
+
16
+ class premium_Template_Tags {
17
+
18
+ /**
19
+ * Instance of this class
20
+ * @since 1.0
21
+ */
22
+
23
+ protected static $instance;
24
+
25
+
26
+ /**
27
+ * $options is option field of select
28
+ *
29
+ * @access protected
30
+ *
31
+ * @since 1.0
32
+ */
33
+ protected $options;
34
+
35
+ /**
36
+ * set instance of this class
37
+ */
38
+
39
+ public static function getInstance() {
40
+ if( !static::$instance ) {
41
+ static::$instance = new self;
42
+ }
43
+ return static::$instance;
44
+ }
45
+
46
+
47
+ public function get_all_post() {
48
+
49
+ $post_types = get_post_types();
50
+ $post_type_not__in = array('attachment', 'revision', 'nav_menu_item', 'custom_css', 'customize_changeset', 'elementor_library');
51
+
52
+ foreach ( $post_type_not__in as $post_type_not ) {
53
+ unset( $post_types[$post_type_not] );
54
+ }
55
+ $post_type = array_values( $post_types );
56
+
57
+ $all_posts = get_posts( array(
58
+ 'post_type' => $post_type
59
+ )
60
+ );
61
+
62
+ if( !empty( $all_posts ) && !is_wp_error( $all_posts ) ) {
63
+ foreach ( $all_posts as $post ) {
64
+ $this->options[ $post->ID ] = strlen( $post->post_title ) > 20 ? substr( $post->post_title, 0, 20 ).'...' : $post->post_title;
65
+ }
66
+ }
67
+ return $this->options;
68
+ }
69
+
70
+ public function get_elementor_page_list(){
71
+ $pagelist = get_posts(array(
72
+ 'post_type' => 'elementor_library',
73
+ 'showposts' => 999,
74
+ ));
75
+
76
+ if ( ! empty( $pagelist ) && ! is_wp_error( $pagelist ) ){
77
+ foreach ( $pagelist as $post ) {
78
+ $options[ $post->ID ] = __( $post->post_title, 'premium_elemnetor' );
79
+ }
80
+ update_option( 'temp_count', $options );
81
+ return $options;
82
+ }
83
+ }
84
+ }
index.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Silence is golden
4
+ *
5
+ * @package Premium Addons
6
+ * @category Core
7
+ * @author Leap13
8
+ * @license GPL-2.0+
9
+ */
premium-addons.php ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: Premium Addons for Elementor
4
+ Description: Page Builder Add-ons for Elementor
5
+ Plugin URI: https://premiumaddons.com
6
+ Version: 1.0
7
+ Author: Leap13
8
+ Author URI: http://leap13.com/
9
+ Text Domain: premium-addons-leap13
10
+ License: GNU General Public License v3.0
11
+ */
12
+
13
+
14
+ /**
15
+ * Checking the set ups and the environment
16
+ */
17
+
18
+ if( !function_exists('add_action') ) {
19
+ die('WordPress not Installed'); // if WordPress not installed kill the page.
20
+ }
21
+
22
+ if( !defined( 'ABSPATH' ) ) exit; // No access of directly access
23
+
24
+ define( 'PREMIUM_ADDONS_URL', plugins_url('/', __FILE__ ) );
25
+ define( 'PREMIUM_ADDONS_PATH', plugin_dir_path( __FILE__ ) );
26
+
27
+ /**
28
+ * Translating the plugins and load some
29
+ * assets
30
+ */
31
+ add_action( 'plugins_loaded', 'premium_addons_elementor_setup');
32
+ function premium_addons_elementor_setup() {
33
+ // Loading .mo and.po file from the lang folder
34
+ load_plugin_textdomain( 'premium_elementor', false, dirname( plugin_basename( __FILE__ ) ) . '/lang' );
35
+
36
+
37
+ // Requires Elmentor Page builder & activation
38
+
39
+ if( file_exists( PREMIUM_ADDONS_PATH . 'admin/activation/elementor-activation.php' ) ) {
40
+ require_once( PREMIUM_ADDONS_PATH . 'admin/activation/elementor-activation.php' );
41
+ }
42
+
43
+ // load the template tags
44
+ if( file_exists( PREMIUM_ADDONS_PATH.'elementor-helper.php' ) ) {
45
+ require_once( PREMIUM_ADDONS_PATH.'elementor-helper.php' );
46
+ }
47
+
48
+ if( file_exists( PREMIUM_ADDONS_PATH.'admin/settings-page.php' ) ) {
49
+ require_once( PREMIUM_ADDONS_PATH.'admin/settings-page.php' );
50
+ }
51
+
52
+
53
+ /*
54
+ * Instantiate the premium Addons for the elementor page builder
55
+ * Included 1. 'premium_addons_widget_register()' for the main method for initaite addons
56
+ * 2. 'premium_addons_widgets_area()' creating the widgets
57
+ * 3. 'initiate_elementor_addons()' creating the category of the widgets
58
+ */
59
+
60
+ new premium_Addon_Elementor();
61
+ }
62
+ // CSS THAT DISPLAYS ON EDITOR PANEL
63
+ add_action( 'elementor/editor/before_enqueue_scripts', function() {
64
+ wp_register_style( 'premium-elements-progression-admin-styles', PREMIUM_ADDONS_URL . 'admin/assets/pa-elements-font/css/pa-elements.css' );
65
+ wp_enqueue_style( 'premium-elements-progression-admin-styles' );
66
+
67
+ } );
68
+
69
+ class premium_Addon_Elementor {
70
+
71
+ /**
72
+ * Load all the hooks here
73
+ * @since 1.0
74
+ */
75
+ public function __construct() {
76
+ add_action( 'elementor/init', array( $this, 'initiate_elementor_addons' ) );
77
+ add_action( 'elementor/widgets/widgets_registered', array( $this, 'premium_addons_widget_register') );
78
+ add_action( 'wp_enqueue_scripts', array( $this, 'premium_addons_required_assets') );
79
+ add_action( 'elementor/frontend/after_register_styles', array( $this, 'frontendafter_style') );
80
+ add_action( 'elementor/preview/enqueue_styles', array( $this, 'elementor_preview_styles' ) );
81
+ }
82
+
83
+
84
+ /**
85
+ * Load all frontend assets file such as stylesheet & javascript files
86
+ * @since 1.0
87
+ */
88
+ public function premium_addons_required_assets() {
89
+ $check_component_active = get_option( 'pa_save_settings' );
90
+ wp_enqueue_style( 'fontAwesome', 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css', array(), '4.7.0', 'all' );
91
+ wp_enqueue_style( 'premium-addons-css', PREMIUM_ADDONS_URL . 'assets/css/premium-addons.css', array(), '1.0', 'all' );
92
+
93
+ wp_enqueue_style( 'animate-css', PREMIUM_ADDONS_URL . 'assets/css/animate.css', array(), '1.6.0', 'all' );
94
+
95
+ wp_enqueue_script('premium-addons-js', PREMIUM_ADDONS_URL .'assets/js/premium-addons.js', array( 'jquery' ), '2.1.0', true );
96
+
97
+ if( $check_component_active['premium-carousel'] ) {
98
+ wp_enqueue_script( 'slick-carousel-js', PREMIUM_ADDONS_URL .'assets/js/lib/slickmin.js', array( 'jquery' ), '1.6.0', true );
99
+ }
100
+ if( $check_component_active['premium-countdown'] ) {
101
+ wp_enqueue_script( 'count-down-timer-js', PREMIUM_ADDONS_URL .'assets/js/lib/jquerycountdown.js', array( 'jquery' ), '2.1.0', true );
102
+ }
103
+ if( $check_component_active['premium-counter'] ) {
104
+ wp_enqueue_script( 'counter-up-js', PREMIUM_ADDONS_URL .'assets/js/lib/countUpmin.js', array( 'jquery' ), '2.1.0', true );
105
+ }
106
+ if( $check_component_active['premium-fancytext'] ) {
107
+ wp_enqueue_script('vticker-js', PREMIUM_ADDONS_URL .'assets/js/lib/Vticker.js', array( 'jquery' ), '1.0', true);
108
+ wp_enqueue_script('typed-js', PREMIUM_ADDONS_URL .'assets/js/lib/typedmin.js', array( 'jquery' ), '1.0', true);
109
+ }
110
+ if( $check_component_active['premium-maps'] ) {
111
+ wp_enqueue_script('google-maps', 'http://maps.google.com/maps/api/js?sensor=false');
112
+ wp_enqueue_script('gomap', PREMIUM_ADDONS_URL. 'assets/js/lib/gomap.js', array( 'jquery' ), '1.0', true);
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Deregister for the default animations.min.css file
118
+ * @since 1.0
119
+ */
120
+ public function frontendafter_style() {
121
+ wp_deregister_style( 'elementor-animations' );
122
+ }
123
+
124
+
125
+
126
+ // CSS THAT DISPLAYS ONLY WHEN EDITOR IS OPEN ON IFRAME
127
+ public function elementor_preview_styles() {
128
+ wp_enqueue_style( 'elementor-edit-preview', PREMIUM_ADDONS_URL .'assets/css/elementor-preview-style.css' );
129
+ }
130
+
131
+ public function premium_addons_widget_register() {
132
+ $this->initiate_elementor_addons();
133
+ $this->premium_addons_widgets_area();
134
+ }
135
+
136
+ private function premium_addons_widgets_area() {
137
+ $pa_elements_keys = ['premium-banner', 'premium-blog','premium-carousel', 'premium-countdown','premium-counter','premium-dual-header','premium-fancytext','premium-image-separator','premium-maps','premium-modalbox','premium-person','premium-progressbar','premium-testimonials','premium-title','premium-videobox'];
138
+
139
+ $pa_default_settings = array_fill_keys( $pa_elements_keys, true );
140
+
141
+ $check_component_active = get_option( 'pa_save_settings', $pa_default_settings );
142
+
143
+ if( $check_component_active['premium-banner'] ) {
144
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-banner.php' );
145
+ }
146
+ if( $check_component_active['premium-carousel'] ) {
147
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-carousel.php' );
148
+ }
149
+
150
+ if( $check_component_active['premium-countdown'] ) {
151
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-countdown.php' );
152
+ }
153
+
154
+ if( $check_component_active['premium-counter'] ) {
155
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-counter.php' );
156
+ }
157
+
158
+ if( $check_component_active['premium-image-separator'] ) {
159
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-imageseparator.php' );
160
+ }
161
+
162
+ if( $check_component_active['premium-modalbox'] ) {
163
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-modalbox.php' );
164
+ }
165
+ if( $check_component_active['premium-progressbar'] ) {
166
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-progressbar.php' );
167
+ }
168
+
169
+ if( $check_component_active['premium-testimonials'] ) {
170
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-testimonials.php' );
171
+ }
172
+
173
+ if( $check_component_active['premium-title'] ) {
174
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-title.php' );
175
+ }
176
+
177
+ if( $check_component_active['premium-fancytext'] ) {
178
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-fancytext.php' );
179
+ }
180
+
181
+ if( $check_component_active['premium-videobox'] ) {
182
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-videobox.php' );
183
+ }
184
+
185
+ if( $check_component_active['premium-blog'] ) {
186
+ require_once( PREMIUM_ADDONS_PATH.'queries.php' );
187
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-blog.php' );
188
+ }
189
+
190
+ if( $check_component_active['premium-person'] ) {
191
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-person.php' );
192
+ }
193
+
194
+ if( $check_component_active['premium-maps'] ) {
195
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-maps.php' );
196
+ }
197
+
198
+ if( $check_component_active['premium-dual-header'] ) {
199
+ require_once( PREMIUM_ADDONS_PATH. 'widgets/premium-dual-header.php' );
200
+ }
201
+
202
+ }
203
+
204
+ public function initiate_elementor_addons() {
205
+ Elementor\Plugin::instance()->elements_manager->add_category(
206
+ 'premium-elements',
207
+ array(
208
+ 'title' => __( 'Premium Addons', 'premium_elementor' )
209
+ ),
210
+ 1
211
+ );
212
+ }
213
+ }
214
+
215
+
216
+
217
+
218
+
219
+
queries.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ function premium_blog_get_post_data($args, $paged, $new_offset){
5
+ $defaults = array(
6
+ 'category' => '',
7
+ 'posts_per_page' => 1,
8
+ 'paged' => $paged,
9
+ 'offset' => $new_offset,
10
+ );
11
+
12
+ $atts = wp_parse_args($args,$defaults);
13
+
14
+ $posts = get_posts($atts);
15
+
16
+ return $posts;
17
+ }
18
+
19
+ function premium_blog_get_post_settings($settings){
20
+ $post_args['category'] = $settings['premium_blog_categories'];
21
+ $post_args['posts_per_page'] = $settings['premium_blog_number_of_posts'];
22
+
23
+ return $post_args;
24
+ }
25
+
26
+ function premium_addons_get_excerpt_by_id($post_id,$excerpt_length){
27
+ $the_post = get_post($post_id); //Gets post ID
28
+
29
+ $the_excerpt = null;
30
+ if ($the_post)
31
+ {
32
+ $the_excerpt = $the_post->post_excerpt ? $the_post->post_excerpt : $the_post->post_content;
33
+ }
34
+
35
+ $the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images
36
+ $words = explode(' ', $the_excerpt, $excerpt_length + 1);
37
+
38
+ if(count($words) > $excerpt_length) :
39
+ array_pop($words);
40
+ array_push($words, '…');
41
+ $the_excerpt = implode(' ', $words);
42
+ endif;
43
+
44
+ return $the_excerpt;
45
+ }
46
+
47
+ function premium_addons_post_type_categories(){
48
+ $terms = get_terms( array(
49
+ 'taxonomy' => 'category',
50
+ 'hide_empty' => true,
51
+ ));
52
+
53
+ if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
54
+ foreach ( $terms as $term ) {
55
+ $options[ $term->term_id ] = $term->name;
56
+ }
57
+ }
58
+
59
+ return $options;
60
+ }
readme.txt ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Premium Addons for Elementor ===
2
+ Contributors: leap13
3
+ Tags: Elementor, Elementor Page Builder, Elements, Addons, Add-ons, page builder
4
+ Donate link: http://premiumaddons.com
5
+ Requires at least: WordPress 4.5
6
+ Tested up to: WordPress 4.9
7
+ Requires PHP: 5.4
8
+ License: GPL v3.0
9
+ License URI: https://opensource.org/licenses/GPL-3.0
10
+
11
+ 15 Premium Addons for Elementor Page Builder.
12
+
13
+ == Description ==
14
+ Premium Addons library that extends Elementor Page Builder capabilities with 15 fully customizable elements that helps you build impressive websites with no coding required.
15
+
16
+ Check Premium Addons Demos
17
+
18
+
19
+ ### Features
20
+
21
+ * 13+ Fully Customizable Elements.
22
+ * Options panel for enabling desired elements only for faster performance.
23
+ * Free Support through online forums.
24
+
25
+
26
+ ### Available Elements
27
+
28
+ 1. Premium Banner
29
+ 2. Premium Image Separator
30
+ 3. Premium Fancy Text
31
+ 4. Premium Heading
32
+ 5. Premium Carousel
33
+ 6. Premium Dual Header
34
+ 7. Premium Testimonials
35
+ 8. Premium Persons
36
+ 9. Premium Countdown
37
+ 10. Premium Blog
38
+ 11. Premium Counter
39
+ 12. Premium Video Box
40
+ 13. Premium Google Maps
41
+ 14. Premium Modal Box
42
+ 15. Premium Progress Bar
43
+
44
+ == Installation ==
45
+
46
+ = Minimum Requirements =
47
+
48
+ * WordPress 4.5 or greater
49
+ * PHP version 5.4 or greater
50
+ * MySQL version 5.0 or greater
51
+
52
+ - First make sure that Elementor Page Builder is installed, As this plugin works only with it.
53
+ - Download the plugin then Upload it to the plugin folder: /wp-content/plugins/ or install it through the WordPress plugins screen directly.
54
+ - Activate the plugin through the ‘Plugins’ screen in WordPress
55
+ - You can find Premium Addons Elements under the category “Premium Addons for Elementor” on your Elementor element/widget list.
56
+
57
+ == Frequently Asked Questions ==
58
+ = Is this a standalone Plugin? =
59
+
60
+ No. You cannot use Premium Addons without Elementor as it\'s an addons plugin for Elementor.
61
+
62
+ = Does it work with any WordPress theme? =
63
+
64
+ Yes it will work with any WordPress theme as long as you are using Elementor as a page builder.
65
+
66
+ = Will this plugin slow down my website speed? =
67
+
68
+ Premium Addons for Elementor is light weight and we also gave you the control to enable only the elements you actually use on your website for faster performance.
widgets/premium-banner.php ADDED
@@ -0,0 +1,448 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Banner_Widget extends Widget_Base {
7
+
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-banner';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__( 'Premium Banner', 'premium_elementor' );
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-image2';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium banner
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ $this->start_controls_section(
35
+ 'premium_banner_global_settings',
36
+ [
37
+ 'label' => esc_html__( 'Banner content settings', 'premium_elementor' )
38
+ ]
39
+ );
40
+
41
+ $this->add_control(
42
+ 'premium_banner_title',
43
+ [
44
+ 'label' => esc_html__( 'Title', 'premium_elementor' ),
45
+ 'placeholder' => esc_html__( 'Give a title to this banner', 'premium_elementor' ),
46
+ 'description' => esc_html__( 'Give a title to this banner', 'premium_elementor' ),
47
+ 'type' => Controls_Manager::TEXT,
48
+ 'default' => esc_html__( 'Premium awesome Banner', 'premium_elementor' ),
49
+ 'label_block' => false
50
+ ]
51
+ );
52
+
53
+ $this->add_control(
54
+ 'premium_banner_description',
55
+ [
56
+ 'label' => esc_html__( 'Description', 'premium_elementor' ),
57
+ 'description' => esc_html__( 'Give the description to this banner', 'premium_elementor' ),
58
+ 'type' => Controls_Manager::WYSIWYG,
59
+ 'default' => esc_html__( 'Premium Banner gives you widge range of settings options. You will love those', 'premium_elementor' ),
60
+ 'label_block' => true
61
+ ]
62
+ );
63
+
64
+ $this->add_control(
65
+ 'premium_banner_title_tag',
66
+ [
67
+ 'label' => esc_html__( 'Title Tag', 'premium_elementor' ),
68
+ 'description' => esc_html__( 'Select the tag for the title', 'premium_elementor' ),
69
+ 'type' => Controls_Manager::SELECT,
70
+ 'default' => 'h3',
71
+ 'options' => [
72
+ 'h1' => esc_html( 'H1' ),
73
+ 'h2' => esc_html( 'H2' ),
74
+ 'h3' => esc_html( 'H3' ),
75
+ 'h4' => esc_html( 'H4' ),
76
+ 'h5' => esc_html( 'H5' ),
77
+ 'h6' => esc_html( 'H6' )
78
+ ],
79
+ 'label_block' => true,
80
+ 'separator' => 'after'
81
+ ]
82
+ );
83
+
84
+ $this->end_controls_section();
85
+
86
+ $this->start_controls_section(
87
+ 'premium_banner_image_section',
88
+ [
89
+ 'label' => esc_html__( 'Image Settings', 'premium_elementor' )
90
+ ]
91
+ );
92
+
93
+ $this->add_control(
94
+ 'premium_banner_image',
95
+ [
96
+ 'label' => esc_html__( 'premium Banner Image', 'premium_elementor' ),
97
+ 'description' => esc_html__( 'Select an image for the Banner', 'premium_elementor' ),
98
+ 'type' => Controls_Manager::MEDIA,
99
+ 'default' => [
100
+ 'url' => Utils::get_placeholder_image_src()
101
+ ],
102
+ 'show_external' => true
103
+ ]
104
+ );
105
+
106
+ $this->add_control(
107
+ 'premium_banner_image_bg_color',
108
+ [
109
+ 'label' => esc_html__( 'Background Color', 'premium_elementor' ),
110
+ 'type' => Controls_Manager::COLOR,
111
+ 'scheme' => [
112
+ 'type' => Scheme_Color::get_type(),
113
+ 'value' => Scheme_Color::COLOR_1,
114
+ ],
115
+ 'selectors' => [
116
+ '{{WRAPPER}} .premium_addons-banner-ib' => 'background: {{VALUE}};',
117
+ ]
118
+ ]
119
+ );
120
+
121
+ $this->add_control(
122
+ 'premium_banner_image_link_switcher',
123
+ [
124
+ 'label' => esc_html__( 'Banner custom link?', 'premium_elementor' ),
125
+ 'type' => Controls_Manager::SWITCHER,
126
+ 'default' => '',
127
+ 'description' => esc_html__( 'Do you want to set the custom link to the banner?', 'premium_elementor' ),
128
+ ]
129
+ );
130
+
131
+ $this->add_control(
132
+ 'premium_banner_image_existing_page_link',
133
+ [
134
+ 'label' => esc_html__( 'Set existing page Link', 'premium_elementor' ),
135
+ 'type' => Controls_Manager::SELECT,
136
+ 'description' => esc_html__( 'Which page link you want to set to banner?', 'premium_elementor' ),
137
+ 'condition' => [
138
+ 'premium_banner_image_link_switcher!' => 'yes'
139
+ ],
140
+ 'options' => $this->getTemplateInstance()->get_all_post()
141
+ ]
142
+ );
143
+
144
+ $this->add_control(
145
+ 'premium_banner_image_custom_link',
146
+ [
147
+ 'label' => esc_html__( 'Set custom Link', 'premium_elementor' ),
148
+ 'type' => Controls_Manager::URL,
149
+ 'description' => esc_html__( 'What custom link you want to set to banner?', 'premium_elementor' ),
150
+ 'condition' => [
151
+ 'premium_banner_image_link_switcher' => 'yes'
152
+ ],
153
+ 'show_external' => false,
154
+ ]
155
+ );
156
+
157
+ $this->add_control(
158
+ 'premium_banner_image_link_open_new_tab',
159
+ [
160
+ 'label' => esc_html__( 'Open in new tab?', 'premium_elementor' ),
161
+ 'type' => Controls_Manager::SWITCHER,
162
+ 'default' => '',
163
+ 'description' => esc_html__( 'Do you want to open link in new tab?', 'premium_elementor' ),
164
+ ]
165
+ );
166
+
167
+ $this->add_control(
168
+ 'premium_banner_image_link_add_nofollow',
169
+ [
170
+ 'label' => esc_html__( 'Add nofollow option to link', 'premium_elementor' ),
171
+ 'type' => Controls_Manager::SWITCHER,
172
+ 'default' => '',
173
+ 'description' => esc_html__('Do you want to add nofollow option to link?', 'premium_elementor' ),
174
+ ]
175
+ );
176
+
177
+ $this->add_control(
178
+ 'premium_banner_image_animation',
179
+ [
180
+ 'label' => esc_html__( 'Animation styles', 'premium_elementor' ),
181
+ 'type' => Controls_Manager::SELECT,
182
+ 'default' => 'premium_banner_animation1',
183
+ 'description' => esc_html__( 'Select animation on the banner', 'premium_elementor' ),
184
+ 'options' => [
185
+ 'premium_banner_animation1' => 'Style One',
186
+ 'premium_banner_animation5' => 'Style Two',
187
+ 'premium_banner_animation13' => 'Style Three',
188
+ 'premium_banner_animation2' => 'Style Four',
189
+ 'premium_banner_animation4' => 'Style Five',
190
+ 'premium_banner_animation6' => 'Style Six'
191
+ ]
192
+ ]
193
+ );
194
+
195
+ $this->add_control(
196
+ 'premium_banner_style2_title_bg',
197
+ [
198
+ 'label' => esc_html__( 'Title BG color', 'premium_elementor' ),
199
+ 'type' => Controls_Manager::COLOR,
200
+ 'scheme' => [
201
+ 'type' => Scheme_Color::get_type(),
202
+ 'value' => Scheme_Color::COLOR_1,
203
+ ],
204
+ 'description' => esc_html__( 'Title Background Color', 'premium_elementor' ),
205
+ 'condition' => [
206
+ 'premium_banner_image_animation' => 'premium_banner_animation5'
207
+ ]
208
+ ]
209
+ );
210
+
211
+ $this->add_control(
212
+ 'premium_banner_height',
213
+ [
214
+ 'label' => esc_html__( 'Banner Height', 'premium_elementor' ),
215
+ 'type' => Controls_Manager::SELECT,
216
+ 'default' => 'default',
217
+ 'description' => esc_html__( 'Set height of the banner', 'premium_elementor' ),
218
+ 'options' => [
219
+ 'default' => 'Default',
220
+ 'custom' => 'Custom',
221
+ ]
222
+ ]
223
+ );
224
+
225
+ $this->add_control(
226
+ 'premium_banner_custom_height',
227
+ [
228
+ 'label' => esc_html__( 'Min Height', 'premium_elementor' ),
229
+ 'type' => Controls_Manager::NUMBER,
230
+ 'description' => esc_html__( 'Set min height of the banner in px', 'premium_elementor' ),
231
+ 'condition' => [
232
+ 'premium_banner_height' => 'custom'
233
+ ],
234
+ 'selectors' => [
235
+ '{{WRAPPER}} .premium_addons-banner-ib' => 'height: {{VALUE}}px;'
236
+ ]
237
+ ]
238
+ );
239
+
240
+ $this->add_control(
241
+ 'premium_banner_extra_class',
242
+ [
243
+ 'label' => esc_html__( 'Extra Class', 'premium_elementor' ),
244
+ 'type' => Controls_Manager::TEXT
245
+ ]
246
+ );
247
+
248
+ $this->end_controls_section();
249
+
250
+ $this->start_controls_section(
251
+ 'premium_banner_title_style',
252
+ [
253
+ 'label' => esc_html__( 'Title Styles', 'premium_elementor' ),
254
+ 'tab' => Controls_Manager::TAB_STYLE
255
+ ]
256
+ );
257
+
258
+ $this->add_control(
259
+ 'premium_banner_color_of_title',
260
+ [
261
+ 'label' => esc_html__( 'Color', 'premium_elementor' ),
262
+ 'type' => Controls_Manager::COLOR,
263
+ 'scheme' => [
264
+ 'type' => Scheme_Color::get_type(),
265
+ 'value' => Scheme_Color::COLOR_1,
266
+ ],
267
+ 'selectors' => [
268
+ '{{WRAPPER}} .premium_addons-banner-ib-desc .premium_banner_title' => 'color: {{VALUE}};'
269
+ ],
270
+ ]
271
+ );
272
+
273
+ $this->add_group_control(
274
+ Group_Control_Typography::get_type(),
275
+ [
276
+ 'name' => 'premium_banner_title_typhography',
277
+ 'selector' => '{{WRAPPER}} .premium_addons-banner-ib-desc .premium_banner_title',
278
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
279
+ ]
280
+ );
281
+
282
+
283
+ $this->end_controls_section();
284
+
285
+ $this->start_controls_section(
286
+ 'premium_banner_styles_of_content',
287
+ [
288
+ 'label' => esc_html__( 'Content Styles', 'premium_elementor' ),
289
+ 'tab' => Controls_Manager::TAB_STYLE
290
+ ]
291
+ );
292
+
293
+
294
+ $this->add_control(
295
+ 'premium_banner_color_of_content',
296
+ [
297
+ 'label' => esc_html__( 'Color', 'premium_elementor' ),
298
+ 'type' => Controls_Manager::COLOR,
299
+ 'scheme' => [
300
+ 'type' => Scheme_Color::get_type(),
301
+ 'value' => Scheme_Color::COLOR_3,
302
+ ],
303
+ 'selectors' => [
304
+ '{{WRAPPER}} .premium_banner .premium_banner_content' => 'color: {{VALUE}};'
305
+ ],
306
+ ]
307
+ );
308
+
309
+ $this->add_group_control(
310
+ Group_Control_Typography::get_type(),
311
+ [
312
+ 'name' => 'premium_banner_content_typhography',
313
+ 'selector' => '{{WRAPPER}} .premium_banner .premium_banner_content',
314
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
315
+ ]
316
+ );
317
+
318
+
319
+ $this->add_control(
320
+ 'premium_banner_image_opacity',
321
+ [
322
+ 'label' => esc_html__( 'Opacity', 'premium_elementor' ),
323
+ 'type' => Controls_Manager::SLIDER,
324
+ 'default' => [
325
+ 'size' => 1,
326
+ ],
327
+ 'range' => [
328
+ 'px' => [
329
+ 'min' => 0,
330
+ 'max' => 1,
331
+ 'step' => .1,
332
+ ]
333
+ ],
334
+ 'selectors' => [
335
+ '{{WRAPPER}} .premium_addons-banner-ib .premium_addons-banner-ib-img' => 'opacity: {{SIZE}};',
336
+ ],
337
+ ]
338
+ );
339
+
340
+
341
+ $this->add_control(
342
+ 'premium_banner_image_hover_opacity',
343
+ [
344
+ 'label' => esc_html__( 'Hover Opacity', 'premium_elementor' ),
345
+ 'type' => Controls_Manager::SLIDER,
346
+ 'default' => [
347
+ 'size' => 1,
348
+ ],
349
+ 'range' => [
350
+ 'px' => [
351
+ 'min' => 0,
352
+ 'max' => 1,
353
+ 'step' => .1,
354
+ ]
355
+ ],
356
+ 'selectors' => [
357
+ '{{WRAPPER}} .premium_addons-banner-ib .premium_addons-banner-ib-img.active' => 'opacity: {{SIZE}};',
358
+ ],
359
+ ]
360
+ );
361
+
362
+ $this->end_controls_section();
363
+
364
+
365
+ }
366
+
367
+
368
+ protected function render() {
369
+ $settings = $this->get_settings(); // All the settings values stored in $settings varaiable
370
+
371
+ $title_tag = $settings[ 'premium_banner_title_tag' ];
372
+ $title = $settings[ 'premium_banner_title' ];
373
+ $full_title = '<'. $title_tag .' class="premium_addons-banner-ib-title ult-responsive premium_banner_title">' .$title. '</'.$title_tag.'>';
374
+
375
+ $link = isset( $settings['premium_banner_image_link_switcher'] ) && $settings['premium_banner_image_link_switcher'] != '' ? $settings['premium_banner_image_custom_link']['url'] : get_permalink( $settings['premium_banner_image_existing_page_link'] );
376
+
377
+ $link_title = $settings['premium_banner_image_link_switcher'] != 'yes' ? get_the_title( $settings['premium_banner_image_existing_page_link'] ) : '';
378
+ $open_new_tab = $settings['premium_banner_image_link_open_new_tab'] == 'yes' ? ' target="_blank"' : '';
379
+ $full_link = '<a class="premium_addons-banner-ib-link" href="'. $link .'" title="'. $link_title .'"'.$open_new_tab.'></a>';
380
+ $animation_class = $settings['premium_banner_image_animation'];
381
+ $extra_class = isset( $settings['premium_banner_extra_class'] ) && $settings['premium_banner_extra_class'] != '' ? ' '. $settings['premium_banner_extra_class'] : '';
382
+ $min_height_class = $settings['premium_banner_height'] == 'custom' ? '' : '';
383
+ $full_class = $animation_class.$extra_class.$min_height_class;
384
+ ob_start();
385
+
386
+ ?>
387
+ <div class="premium_banner">
388
+ <div class="premium_addons-banner-ib <?php echo $full_class; ?> premium-banner-min-height">
389
+ <?php if( isset( $settings['premium_banner_image']['url'] ) && $settings['premium_banner_image']['url'] != '' ): ?>
390
+ <img class="premium_addons-banner-ib-img" alt="null" src="<?php echo $settings['premium_banner_image']['url']; ?>">
391
+ <?php endif; ?>
392
+ <div class="premium_addons-banner-ib-desc" style="">
393
+ <?php echo $full_title; ?>
394
+ <div class="premium_addons-banner-ib-content premium_banner_content">
395
+ <?php echo $this->parse_text_editor($settings[ 'premium_banner_description' ] ); ?>
396
+ </div>
397
+ </div>
398
+ <?php
399
+ if( !empty( $settings['premium_banner_image_custom_link']['url'] ) || !empty($settings['premium_banner_image_existing_page_link'] ) ) {
400
+ echo $full_link;
401
+ }
402
+ ?>
403
+ </div>
404
+ <script>
405
+
406
+ (function( $ ) {
407
+ $(document).ready( function() {
408
+
409
+ $('.premium_addons-banner-ib').hover(
410
+ function() {
411
+ $(this).find('.premium_addons-banner-ib-img').addClass('active');
412
+ },
413
+ function() {
414
+ $(this).find('.premium_addons-banner-ib-img').removeClass('active');
415
+ }
416
+ );
417
+ })
418
+ })(jQuery);
419
+
420
+ </script>
421
+ <style>
422
+ .elementor-widget-premium-addon-banner .premium_addons-banner-ib-title {
423
+ background: transparent;
424
+ }
425
+
426
+
427
+ <?php if( $settings['premium_banner_image_animation'] == 'premium_banner_animation5') : ?>
428
+ .premium_banner_animation5 .premium_addons-banner-ib-desc {
429
+ background: <?php echo $settings['premium_banner_style2_title_bg']; ?>
430
+ }
431
+ <?php endif; ?>
432
+ </style>
433
+ </div>
434
+
435
+ <?php $output = ob_get_clean();
436
+ echo $output;
437
+ }
438
+
439
+ protected function content_template() {
440
+
441
+ ?>
442
+
443
+
444
+ <?php
445
+ }
446
+ }
447
+
448
+ Plugin::instance()->widgets_manager->register_widget_type( new Premium_Banner_Widget() );
widgets/premium-blog.php ADDED
@@ -0,0 +1,500 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Blog_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-blog';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Blog', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-post';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium blog
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ /* Start Content Section */
35
+ $this->start_controls_section('premium_blog_general_settings',
36
+ [
37
+ 'label' => esc_html__('General Settings', 'premium_elementor'),
38
+ ]
39
+ );
40
+
41
+ /*Hover Image Effect*/
42
+ $this->add_control('premium_blog_hover_image_effect',
43
+ [
44
+ 'label' => esc_html__('Hover Image Effect', 'premium_elementor'),
45
+ 'type' => Controls_Manager::SELECT,
46
+ 'options' => [
47
+ 'zoomin' => esc_html__('Zoom In', 'premium_elementor'),
48
+ 'zoomout'=> esc_html__('Zoom Out', 'premium_elementor'),
49
+ 'scale' => esc_html__('Scale', 'premium_elementor'),
50
+ 'gray' => esc_html__('Grayscale', 'premium_elementor'),
51
+ 'blur' => esc_html__('Blur', 'premium_elementor'),
52
+ ],
53
+ 'default' => 'zoomin',
54
+ 'label_block' => true
55
+ ]
56
+ );
57
+
58
+ /*Hover Image Effect*/
59
+ $this->add_control('premium_blog_hover_color_effect',
60
+ [
61
+ 'label' => esc_html__('Hover Color Effect', 'premium_elementor'),
62
+ 'type' => Controls_Manager::SELECT,
63
+ 'options' => [
64
+ 'none' => esc_html__('None', 'premium_elementor'),
65
+ 'framed' => esc_html__('Framed', 'premium_elementor'),
66
+ 'diagonal' => esc_html__('Diagonal', 'premium_elementor'),
67
+ 'bordered' => esc_html__('Bordered', 'premium_elementor'),
68
+ 'squares' => esc_html__('Squares', 'premium_elementor'),
69
+ ],
70
+ 'default' => 'none',
71
+ 'label_block' => true
72
+ ]
73
+ );
74
+
75
+ /*Bordered Effect Border Color*/
76
+ $this->add_control('premium_blog_border_effect_color',
77
+ [
78
+ 'label' => esc_html__('Plus Icon Color', 'premium_elementor'),
79
+ 'type' => Controls_Manager::COLOR,
80
+ 'default' => '#1c1c1c',
81
+ 'condition' => [
82
+ 'premium_blog_hover_color_effect' => 'bordered',
83
+ ],
84
+ 'selectors' => [
85
+ '{{WRAPPER}} .premium-blog-bordered-border-container' => 'border-color: {{VALUE}};',
86
+ ]
87
+ ]
88
+ );
89
+
90
+ /*Post Format Icon*/
91
+ $this->add_control('premium_blog_post_format_icon',
92
+ [
93
+ 'label' => esc_html__( 'Post Icon', 'essential-addons-elementor' ),
94
+ 'type' => Controls_Manager::SWITCHER,
95
+ 'default' => 'yes',
96
+ ]
97
+ );
98
+
99
+ /*Categories Filter*/
100
+ $this->add_control('premium_blog_categories',
101
+ [
102
+ 'label' => esc_html__( 'Categories', 'essential-addons-elementor' ),
103
+ 'type' => Controls_Manager::SELECT2,
104
+ 'label_block' => true,
105
+ 'multiple' => true,
106
+ 'options' => premium_addons_post_type_categories(),
107
+ ]
108
+ );
109
+
110
+ /*Excerpt*/
111
+ $this->add_control('premium_blog_excerpt',
112
+ [
113
+ 'label' => esc_html__('Excerpt', 'premium_elementor'),
114
+ 'type' => Controls_Manager::SWITCHER,
115
+ 'default' => 'yes',
116
+ ]
117
+ );
118
+
119
+
120
+ /*Excerpt Length*/
121
+ $this->add_control('premium_blog_excerpt_length',
122
+ [
123
+ 'label' => esc_html__('Excerpt Length', 'premium_elementor'),
124
+ 'type' => Controls_Manager::NUMBER,
125
+ 'default' => 55,
126
+ 'label_block' => true,
127
+ 'condition' => [
128
+ 'premium_blog_excerpt' => 'yes',
129
+ ]
130
+ ]
131
+ );
132
+
133
+ /*Author Meta*/
134
+ $this->add_control('premium_blog_author_meta',
135
+ [
136
+ 'label' => esc_html__('Author Meta', 'premium_elementor'),
137
+ 'type' => Controls_Manager::SWITCHER,
138
+ 'default' => 'yes',
139
+ ]
140
+ );
141
+
142
+
143
+ /*Date Meta*/
144
+ $this->add_control('premium_blog_date_meta',
145
+ [
146
+ 'label' => esc_html__('Date Meta', 'premium_elementor'),
147
+ 'type' => Controls_Manager::SWITCHER,
148
+ 'default' => 'yes',
149
+ ]
150
+ );
151
+
152
+ /*Categories Meta*/
153
+ $this->add_control('premium_blog_categories_meta',
154
+ [
155
+ 'label' => esc_html__('Categories Meta', 'premium_elementor'),
156
+ 'type' => Controls_Manager::SWITCHER,
157
+ 'default' => 'yes',
158
+ ]
159
+ );
160
+
161
+ /*Comments Meta*/
162
+ $this->add_control('premium_blog_comments_meta',
163
+ [
164
+ 'label' => esc_html__('Comments Meta', 'premium_elementor'),
165
+ 'type' => Controls_Manager::SWITCHER,
166
+ 'default' => 'yes',
167
+ ]
168
+ );
169
+
170
+ /*Tags Meta*/
171
+ $this->add_control('premium_blog_tags_meta',
172
+ [
173
+ 'label' => esc_html__('Tags Meta', 'premium_elementor'),
174
+ 'type' => Controls_Manager::SWITCHER,
175
+ 'default' => 'yes',
176
+ ]
177
+ );
178
+
179
+ /*Paging*/
180
+ $this->add_control('premium_blog_paging',
181
+ [
182
+ 'label' => esc_html__('Paging', 'premium_elementor'),
183
+ 'type' => Controls_Manager::SWITCHER,
184
+ 'default' => 'no',
185
+ ]
186
+ );
187
+
188
+ /*Number of Posts*/
189
+ $this->add_control('premium_blog_number_of_posts',
190
+ [
191
+ 'label' => esc_html__('Posts Per Page', 'premium_elementor'),
192
+ 'type' => Controls_Manager::NUMBER,
193
+ 'min' => 1,
194
+ 'default' => 1,
195
+ ]
196
+ );
197
+
198
+ /*Posts Offset*/
199
+ $this->add_control('premium_blog_offset',
200
+ [
201
+ 'label' => esc_html__( 'Offset Count', 'boosted-elements-progression' ),
202
+ 'type' => Controls_Manager::NUMBER,
203
+ 'default' => '0',
204
+ 'min' => '0',
205
+ ]
206
+ );
207
+
208
+ /*Front Text Align*/
209
+ $this->add_responsive_control('premium_flip_text_align',
210
+ [
211
+ 'label' => esc_html__( 'Text Align', 'elementor' ),
212
+ 'type' => Controls_Manager::CHOOSE,
213
+ 'options' => [
214
+ 'left' => [
215
+ 'title'=> esc_html__( 'Left', 'elementor' ),
216
+ 'icon' => 'fa fa-align-left',
217
+ ],
218
+ 'center' => [
219
+ 'title'=> esc_html__( 'Center', 'elementor' ),
220
+ 'icon' => 'fa fa-align-center',
221
+ ],
222
+ 'right' => [
223
+ 'title'=> esc_html__( 'Right', 'elementor' ),
224
+ 'icon' => 'fa fa-align-right',
225
+ ],
226
+ ],
227
+ 'default' => 'left',
228
+ 'selectors' => [
229
+ '{{WRAPPER}} .premium-blog-content-wrapper' => 'text-align: {{VALUE}};',
230
+ ],
231
+ ]
232
+ );
233
+
234
+
235
+ /*End Content Section*/
236
+ $this->end_controls_section();
237
+
238
+ /*Start Color Style Section*/
239
+ $this->start_controls_section('premium_blog_colors_section',
240
+ [
241
+ 'label' => esc_html__('Colors', 'premium_elementor'),
242
+ 'tab' => Controls_Manager::TAB_STYLE,
243
+ ]
244
+ );
245
+
246
+ /*Plus Icon Color*/
247
+ $this->add_control('premium_blog_plus_color',
248
+ [
249
+ 'label' => esc_html__('Plus Icon Color', 'premium_elementor'),
250
+ 'type' => Controls_Manager::COLOR,
251
+ 'default' => '#1c1c1c',
252
+ 'selectors' => [
253
+ '{{WRAPPER}} .premium-blog-thumbnail-container:before, {{WRAPPER}} .premium-blog-thumbnail-container:after' => 'background-color: {{VALUE}};',
254
+ ]
255
+ ]
256
+ );
257
+
258
+ /*Overlay Color*/
259
+ $this->add_control('premium_blog_overlay_color',
260
+ [
261
+ 'label' => esc_html__('Overlay Color', 'premium_elementor'),
262
+ 'type' => Controls_Manager::COLOR,
263
+ 'default' => '#6ec1e4',
264
+ 'selectors' => [
265
+ '{{WRAPPER}} .premium-blog-framed-effect, {{WRAPPER}} .premium-blog-bordered-effect,{{WRAPPER}} .premium-blog-squares-effect:before,{{WRAPPER}} .premium-blog-squares-effect:after,{{WRAPPER}} .premium-blog-squares-square-container:before,{{WRAPPER}} .premium-blog-squares-square-container:after, {{WRAPPER}} .premium-blog-format-container:hover,{{WRAPPER}} .premium-blog-pagination-container .current' => 'background-color: {{VALUE}};',
266
+ ]
267
+ ]
268
+ );
269
+ /*Content Background Color*/
270
+ $this->add_control('premium_blog_content_background_color',
271
+ [
272
+ 'label' => esc_html__('Content Background Color', 'premium_elementor'),
273
+ 'type' => Controls_Manager::COLOR,
274
+ 'default' => '#f5f5f5',
275
+ 'selectors' => [
276
+ '{{WRAPPER}} .premium-blog-content-wrapper' => 'background-color: {{VALUE}};',
277
+ ]
278
+ ]
279
+ );
280
+
281
+ /*Titles Color*/
282
+ $this->add_control('premium_blog_title_color',
283
+ [
284
+ 'label' => esc_html__('Post Title Color', 'premium_elementor'),
285
+ 'type' => Controls_Manager::COLOR,
286
+ 'default' => '#1c1c1c',
287
+ 'selectors' => [
288
+ '{{WRAPPER}} .premium-blog-entry-title a' => 'color: {{VALUE}};',
289
+ ]
290
+ ]
291
+ );
292
+
293
+ /*Post Format Background Color*/
294
+ $this->add_control('premium_blog_format_back_color',
295
+ [
296
+ 'label' => esc_html__('Format Background Color', 'premium_elementor'),
297
+ 'type' => Controls_Manager::COLOR,
298
+ 'selectors' => [
299
+ '{{WRAPPER}} .premium-blog-format-container' => 'background-color: {{VALUE}};',
300
+ ]
301
+ ]
302
+ );
303
+
304
+ /*Post Format Icon Color*/
305
+ $this->add_control('premium_blog_format_icon_color',
306
+ [
307
+ 'label' => esc_html__('Format Icon Color', 'premium_elementor'),
308
+ 'type' => Controls_Manager::COLOR,
309
+ 'default' => '#1c1c1c',
310
+ 'selectors' => [
311
+ '{{WRAPPER}} .premium-blog-format-container i' => 'color: {{VALUE}};',
312
+ ]
313
+ ]
314
+ );
315
+
316
+ /*Post Content Color*/
317
+ $this->add_control('premium_blog_post_content_color',
318
+ [
319
+ 'label' => esc_html__('Post Content Color', 'premium_elementor'),
320
+ 'type' => Controls_Manager::COLOR,
321
+ 'default' => '#7a7a7a',
322
+ 'selectors' => [
323
+ '{{WRAPPER}} .premium-blog-post-content' => 'color: {{VALUE}};',
324
+ ]
325
+ ]
326
+ );
327
+
328
+ /*Meta Color*/
329
+ $this->add_control('premium_blog_meta_color',
330
+ [
331
+ 'label' => esc_html__('Meta Color', 'premium_elementor'),
332
+ 'type' => Controls_Manager::COLOR,
333
+ 'default' => '#555',
334
+ 'selectors' => [
335
+ '{{WRAPPER}} .premium-blog-entry-meta, {{WRAPPER}} .premium-blog-entry-meta a' => 'color: {{VALUE}};',
336
+ ]
337
+ ]
338
+ );
339
+
340
+ /*Meta Color*/
341
+ $this->add_control('premium_blog_tags_color',
342
+ [
343
+ 'label' => esc_html__('Tags Color', 'premium_elementor'),
344
+ 'type' => Controls_Manager::COLOR,
345
+ 'default' => '#555',
346
+ 'selectors' => [
347
+ '{{WRAPPER}} .premium-blog-post-tags-container, {{WRAPPER}} .premium-blog-post-tags-container a' => 'color: {{VALUE}};',
348
+ ]
349
+ ]
350
+ );
351
+
352
+ /*Meta Hover Color*/
353
+ $this->add_control('premium_blog_meta_tags_hover_color',
354
+ [
355
+ 'label' => esc_html__('Link Hover Color', 'premium_elementor'),
356
+ 'type' => Controls_Manager::COLOR,
357
+ 'default' => '#6ec1e4',
358
+ 'selectors' => [
359
+ '{{WRAPPER}} .premium-blog-entry-title a:hover , {{WRAPPER}} .premium-blog-entry-meta a:hover, {{WRAPPER}} .premium-blog-post-tags-container a:hover' => 'color: {{VALUE}};',
360
+ ]
361
+ ]
362
+ );
363
+
364
+
365
+ /*End Color Style Section*/
366
+ $this->end_controls_section();
367
+
368
+ }
369
+
370
+ protected function render($instance = [])
371
+ {
372
+
373
+ if ( get_query_var('paged') ) { $paged = get_query_var('paged'); } else if ( get_query_var('page') ) { $paged = get_query_var('page'); } else { $paged = 1; }
374
+
375
+ // get our input from the widget settings.
376
+ $settings = $this->get_settings();
377
+
378
+ $image_effect = $settings['premium_blog_hover_image_effect'];
379
+
380
+ $post_effect = $settings['premium_blog_hover_color_effect'];
381
+
382
+ $offset = $settings['premium_blog_offset'];
383
+
384
+ $post_per_page = $settings['premium_blog_number_of_posts'];
385
+
386
+ $new_offset = $offset + ( ( $paged - 1 ) * $post_per_page );
387
+
388
+ $post_args = premium_blog_get_post_settings($settings);
389
+
390
+ $posts = premium_blog_get_post_data($post_args, $paged , $new_offset);
391
+ ?>
392
+ <?php
393
+ if(count($posts)){
394
+ global $post;
395
+ ?>
396
+ <?php
397
+ foreach($posts as $post){
398
+ setup_postdata($post);
399
+ ?>
400
+ <div class="premium-blog-post-container">
401
+ <div class="premium-blog-thumb-effect-wrapper">
402
+ <div class="premium-blog-thumbnail-container <?php echo 'premium-blog-' . $image_effect . '-effect';?>">
403
+ <?php the_post_thumbnail('full'); ?>
404
+ </div>
405
+ <div class="premium-blog-effect-container <?php echo 'premium-blog-'. $post_effect . '-effect'; ?>">
406
+ <?php if( $settings['premium_blog_hover_color_effect'] === 'bordered' ) : ?>
407
+ <div class="premium-blog-bordered-border-container"></div>
408
+ <?php elseif( $settings['premium_blog_hover_color_effect'] === 'squares' ) : ?>
409
+ <div class="premium-blog-squares-square-container"></div>
410
+ <?php endif; ?>
411
+ </div>
412
+ </div>
413
+ <div class="premium-blog-content-wrapper">
414
+ <div class="premium-blog-inner-container">
415
+ <?php if( $settings['premium_blog_post_format_icon'] === 'yes' ) : ?>
416
+ <div class="premium-blog-format-container">
417
+ <a href="<?php the_permalink(); ?>" title="<?php if( get_post_format() === ' ') : echo 'standard' ; else : echo get_post_format(); endif; ?>" target="_blank"><i class="fa fa-<?php if ( get_post_format() === 'aside' ) : echo 'file-text-o'; ?>
418
+ <?php elseif ( get_post_format() === 'audio' ) : echo 'music'; ?>
419
+ <?php elseif ( get_post_format() === 'gallery' ) : echo 'file-image-o'; ?>
420
+ <?php elseif ( get_post_format() === 'image' ) : echo 'picture-o'; ?>
421
+ <?php elseif ( get_post_format() === 'link' ) : echo 'link'; ?>
422
+ <?php elseif ( get_post_format() === 'quote' ) :echo 'quote-left'; ?>
423
+ <?php elseif ( get_post_format() === 'video' ) : echo 'video-camera'; ?>
424
+ <?php else : echo 'thumb-tack'; ?>
425
+ <?php endif; ?>"></i></a>
426
+ </div>
427
+ <?php endif; ?>
428
+ <div class="premium-blog-entry-container">
429
+ <h2 class="premium-blog-entry-title"><a href="<?php the_permalink(); ?>" target="_blank"><?php the_title(); ?></a></h2>
430
+ <div class="premium-blog-entry-meta" style="<?php if( $settings['premium_blog_post_format_icon'] !== 'yes' ) : echo 'margin-left:0px'; endif; ?>">
431
+ <?php if( $settings['premium_blog_author_meta'] === 'yes' ) : ?>
432
+ <span class="premium-blog-post-author premium-blog-meta-data"><i class="fa fa-user fa-fw"></i><?php the_author_posts_link();?></span>
433
+ <?php endif; ?>
434
+ <?php if( $settings['premium_blog_date_meta'] === 'yes' ) : ?>
435
+ <span class="premium-blog-post-time premium-blog-meta-data"><i class="fa fa-calendar fa-fw"></i><a href="<?php the_permalink(); ?>" target="_blank"><?php the_time('F j, Y'); ?></a></span>
436
+ <?php endif; ?>
437
+ <?php if( $settings['premium_blog_categories_meta'] === 'yes' ) : ?>
438
+ <span class="premium-blog-post-categories premium-blog-meta-data"><i class="fa fa-align-left fa-fw"></i><?php the_category(', '); ?></span>
439
+ <?php endif; ?>
440
+ <?php if( $settings['premium_blog_comments_meta'] === 'yes' ) : ?>
441
+ <span class="premium-blog-post-comments premium-blog-meta-data"><i class="fa fa-comments-o fa-fw"></i><a href="<?php the_permalink(); ?>" target="_blank"><?php comments_number('0 Comments', '1', '%'); ?> </a></span>
442
+ <?php endif; ?>
443
+ <span class="premium-blog-post-edit premium-blog-meta-data"><i class="fa fa-pencil fa-fw"></i><?php edit_post_link(); ?></span>
444
+ </div>
445
+ </div>
446
+ </div>
447
+ <div class="premium-blog-post-content" style="<?php if ( $settings['premium_blog_post_format_icon'] !== 'yes' ) : echo 'margin-left:0px;'; endif; ?>">
448
+ <?php
449
+ if ( $settings['premium_blog_excerpt'] === 'yes' ) :
450
+ echo premium_addons_get_excerpt_by_id(get_the_ID(),$settings['premium_blog_excerpt_length']);
451
+ else: the_content();
452
+ endif; ?>
453
+ </div>
454
+ <div class="premium-blog-post-tags-container" style="<?php if( $settings['premium_blog_post_format_icon'] !== 'yes' ) : echo 'margin-left:0px;'; endif; ?>">
455
+ <?php if( $settings['premium_blog_tags_meta'] === 'yes' && the_tags() != '' ) : ?>
456
+ <span class="premium-blog-post-tags"><i class="fa fa-tags fa-fw"></i><?php the_tags(' ', ', '); ?> </span>
457
+ <?php endif; ?>
458
+ </div>
459
+ </div>
460
+ </div>
461
+ <?php
462
+ }
463
+ ?>
464
+ <?php if ( $settings['premium_blog_paging'] === 'yes' ) : ?>
465
+ <div class="premium-blog-pagination-container">
466
+ <?php
467
+ $count_posts = wp_count_posts();
468
+ $published_posts = $count_posts->publish;
469
+
470
+ $page_tot = ceil( ( $published_posts - $offset ) / $settings['premium_blog_number_of_posts'] );
471
+ if ( $page_tot > 1 ) {
472
+ $big = 999999999;
473
+ echo paginate_links( array(
474
+ 'base' => str_replace( $big, '%#%',get_pagenum_link( 999999999, false ) ),
475
+ 'format' => '?paged=%#%',
476
+ 'current' => max( 1, $paged ),
477
+ 'total' => $page_tot,
478
+ 'prev_next' => true,
479
+ 'prev_text' => esc_html__("&lsaquo; Previous"),
480
+ 'next_text' => esc_html__("Next &rsaquo;"),
481
+ 'end_size' => 1,
482
+ 'mid_size' => 2,
483
+ 'type' => 'list'
484
+ )
485
+ );
486
+ }
487
+ ?>
488
+ </div>
489
+ <?php endif; ?>
490
+ <?php
491
+ wp_reset_postdata();
492
+
493
+ } ?>
494
+
495
+
496
+
497
+ <?php
498
+ }
499
+ }
500
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Blog_Widget());
widgets/premium-carousel.php ADDED
@@ -0,0 +1,1055 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+ if( !defined( 'ABSPATH' ) ) exit; // No access of directly access
4
+
5
+ class Premium_Carousel_Widget extends Widget_Base {
6
+
7
+ protected $templateInstance;
8
+
9
+ public function getTemplateInstance() {
10
+ return $this->templateInstance = premium_Template_Tags::getInstance();
11
+ }
12
+
13
+ public function get_name() {
14
+ return 'premium-carousel-widget';
15
+ }
16
+
17
+ public function get_title() {
18
+ return esc_html__( 'Premium Carousel', 'premium_elementor' );
19
+ }
20
+
21
+ public function get_icon() {
22
+ return 'pa-pa-points';
23
+ }
24
+
25
+ public function get_script_depends() {
26
+ return array( 'slick-carousel.js' );
27
+ }
28
+
29
+ public function get_categories() {
30
+ return [ 'premium-elements' ];
31
+ }
32
+
33
+ protected function _register_controls() {
34
+ $this->start_controls_section(
35
+ 'premium-carousel-global-settings',
36
+ [
37
+ 'label' => esc_html__( 'Premium Carousel Settings' , 'premium_elementor' )
38
+ ]
39
+ );
40
+
41
+ $this->add_control(
42
+ 'premium_carousel_slider_content',
43
+ [
44
+ 'label' => esc_html__( 'Slider Content', 'premium_elementor' ),
45
+ 'description' => esc_html__( 'The slide content is the post of elementor libray. Each post will be slider content when you select from here', 'premium_elementor' ),
46
+ 'type' => Controls_Manager::SELECT2,
47
+ 'options' => $this->getTemplateInstance()->get_elementor_page_list(),
48
+ 'multiple' => true,
49
+ ]
50
+ );
51
+
52
+
53
+ $this->add_control(
54
+ 'premium_carousel_slider_type',
55
+ [
56
+ 'label' => esc_html__( 'Slider Type', 'premium_elementor' ),
57
+ 'description' => esc_html__( 'Which type of slider to show?', 'premium_elementor' ),
58
+ 'type' => Controls_Manager::SELECT,
59
+ 'default' => 'horizontal',
60
+ 'options' => [
61
+ 'horizontal' => esc_html__( 'Horizontal', 'premium_elementor' ),
62
+ 'vertical' => esc_html__( 'Vertical', 'premium_elementor' )
63
+ ]
64
+ ]
65
+ );
66
+
67
+ $this->add_control(
68
+ 'premium_carousel_slides_to_show',
69
+ [
70
+ 'label' => esc_html__( 'Slides to Scroll', 'premium_elementor' ),
71
+ 'type' => Controls_Manager::SELECT,
72
+ 'default' => 'all',
73
+ 'options' => [
74
+ 'all' => esc_html__( 'All visible', 'premium_elementor' ),
75
+ 'single' => esc_html__( 'One at a time', 'premium_elementor' )
76
+ ]
77
+ ]
78
+ );
79
+
80
+ $this->add_control(
81
+ 'premium_carousel_responsive_desktop',
82
+ [
83
+ 'label' => esc_html__( 'Slides on Desktop', 'premium_elementor' ),
84
+ 'type' => Controls_Manager::NUMBER,
85
+ 'default' => 5
86
+ ]
87
+ );
88
+
89
+ $this->add_control(
90
+ 'premium_carousel_responsive_tabs',
91
+ [
92
+ 'label' => esc_html__( 'Slides on Tabs', 'premium_elementor' ),
93
+ 'type' => Controls_Manager::NUMBER,
94
+ 'default' => 3
95
+ ]
96
+ );
97
+
98
+ $this->add_control(
99
+ 'premium_carousel_responsive_mobile',
100
+ [
101
+ 'label' => esc_html__( 'Slides on Mobile', 'premium_elementor' ),
102
+ 'type' => Controls_Manager::NUMBER,
103
+ 'default' => 2
104
+ ]
105
+ );
106
+
107
+ $this->add_control(
108
+ 'premium_carousel_loop',
109
+ [
110
+ 'label' => esc_html__( 'Infinite Loop', 'premium_elementor' ),
111
+ 'type' => Controls_Manager::SWITCHER,
112
+ 'default' => 'yes'
113
+ ]
114
+ );
115
+
116
+ $this->add_control(
117
+ 'premium_carousel_speed',
118
+ [
119
+ 'label' => esc_html__( 'Transition Speed', 'premium_elementor' ),
120
+ 'description' => esc_html__( 'Speed at which next slide comes. (ms)', 'premium_elementor' ),
121
+ 'type' => Controls_Manager::NUMBER,
122
+ 'default' => 300
123
+ ]
124
+ );
125
+
126
+ $this->add_control(
127
+ 'premium_carousel_autoplay',
128
+ [
129
+ 'label' => esc_html__( 'Autoplay Slides‏', 'premium_elementor' ),
130
+ 'description' => esc_html__( 'Slide will start automatically', 'premium_elementor' ),
131
+ 'type' => Controls_Manager::SWITCHER,
132
+ 'default' => 'yes'
133
+ ]
134
+ );
135
+
136
+ $this->add_control(
137
+ 'premium_carousel_autoplay_speed',
138
+ [
139
+ 'label' => esc_html__( 'Autoplay Speed', 'premium_elementor' ),
140
+ 'description' => esc_html__( 'Autoplay speed at which next slide comes (ms)', 'premium_elementor' ),
141
+ 'type' => Controls_Manager::NUMBER,
142
+ 'default' => 5000,
143
+ 'condition' => [
144
+ 'premium_carousel_autoplay' => 'yes'
145
+ ],
146
+ 'separator' => 'after'
147
+ ]
148
+ );
149
+
150
+ $this->add_control(
151
+ 'premium_carousel_animation_list',
152
+ [
153
+ 'label' => esc_html__( 'Animations', 'premium_elementor' ),
154
+ 'type' => Controls_Manager::SELECT,
155
+ 'default' => 'no-animation',
156
+ 'options' => [
157
+ 'no-animation' => esc_html__( 'Default', 'premium_elementor' ),
158
+ 'swing' => esc_html__( 'Swing', 'premium_elementor' ),
159
+ 'pulse' => esc_html__( 'Pulse', 'premium_elementor' ),
160
+ 'fadeIn' => esc_html__( 'Fade In', 'premium_elementor' ),
161
+ 'fadeInUp' => esc_html__( 'Fade In Up', 'premium_elementor' ),
162
+ 'fadeInDown' => esc_html__( 'Fade In Down', 'premium_elementor' ),
163
+ 'fadeInLeft' => esc_html__( 'Fade In Left', 'premium_elementor' ),
164
+ 'fadeInRight' => esc_html__( 'Fade In Righ', 'premium_elementor' ),
165
+ 'fadeInUpBig' => esc_html__( 'Fade In Up Long', 'premium_elementor' ),
166
+ 'fadeInDownBig' => esc_html__( 'Fade In Down Long', 'premium_elementor' ),
167
+ 'fadeInLeftBig' => esc_html__( 'Fade In Left Long', 'premium_elementor' ),
168
+ 'fadeInRightBig' => esc_html__( 'Fade In Right Long', 'premium_elementor' ),
169
+ 'slideInDown' => esc_html__( 'Slide In Down', 'premium_elementor' ),
170
+ 'slideInLeft' => esc_html__( 'Slide In Left', 'premium_elementor' ),
171
+ 'bounceInUp' => esc_html__( 'Bounce In', 'premium_elementor' ),
172
+ 'bounceInDown' => esc_html__( 'Bounce In Up', 'premium_elementor' ),
173
+ 'bounceInLeft' => esc_html__( 'Bounce In Down', 'premium_elementor' ),
174
+ 'bounceInRight' => esc_html__( 'Bounce In Left', 'premium_elementor' ),
175
+ 'rotateIn' => esc_html__( 'Rotate In', 'premium_elementor' ),
176
+ 'lightSpeedIn' => esc_html__( 'Light Speed In', 'premium_elementor' ),
177
+ 'rollIn' => esc_html__( 'Roll In', 'premium_elementor' ),
178
+ ]
179
+ ]
180
+ );
181
+
182
+ $this->add_control(
183
+ 'premium_carousel_extra_class',
184
+ [
185
+ 'label' => esc_html__( 'Extra Class', 'premium_elementor' ),
186
+ 'type' => Controls_Manager::TEXT
187
+ ]
188
+ );
189
+
190
+
191
+ $this->end_controls_section();
192
+
193
+ $this->start_controls_section(
194
+ 'premium_carousel_navigation',
195
+ [
196
+ 'label' => esc_html__( 'Navigation Setup', 'premium_elementor' ),
197
+ 'tab' => Controls_Manager::TAB_STYLE
198
+ ]
199
+ );
200
+
201
+
202
+ $this->add_control(
203
+ 'premium_carousel_navigation_show',
204
+ [
205
+ 'label' => esc_html__( 'Navigation Arrows', 'premium_elementor' ),
206
+ 'description' => esc_html__( 'Navigation Arrows show or hide', 'premium_elementor' ),
207
+ 'type' => Controls_Manager::SWITCHER,
208
+ 'default' => 'yes'
209
+ ]
210
+ );
211
+
212
+ $this->add_control(
213
+ 'premium_carousel_arrow_style',
214
+ [
215
+ 'label' => esc_html__( 'Arrow Style', 'premium_elementor' ),
216
+ 'type' => Controls_Manager::SELECT,
217
+ 'default' => 'default',
218
+ 'options' => [
219
+ 'default' => esc_html__( 'Default', 'premium_elementor' ),
220
+ 'circle-bg' => esc_html__( 'Circle Background', 'premium_elementor' ),
221
+ 'square-bg' => esc_html__( 'Square Background', 'premium_elementor' ),
222
+ 'circle-border' => esc_html__( 'Circle border', 'premium_elementor' ),
223
+ 'square-border' => esc_html__( 'Square border', 'premium_elementor' ),
224
+ ],
225
+ 'condition' => [
226
+ 'premium_carousel_navigation_show' => 'yes'
227
+ ]
228
+ ]
229
+ );
230
+
231
+ $this->add_control(
232
+ 'premium_carousel_arrow_bg_color',
233
+ [
234
+ 'label' => esc_html__( 'Background Color', 'premium_elementor' ),
235
+ 'type' => Controls_Manager::COLOR,
236
+ 'scheme' => [
237
+ 'type' => Scheme_Color::get_type(),
238
+ 'value' => Scheme_Color::COLOR_1,
239
+ ],
240
+ 'default' => '#ffffff',
241
+ 'condition' => [
242
+ 'premium_carousel_arrow_style' => [ 'circle-bg', 'square-bg' ]
243
+ ],
244
+ 'selectors' => [
245
+ '{{WRAPPER}} .premium-carousel-wrapper .circle-bg' => 'background: {{VALUE}};',
246
+ '{{WRAPPER}} .premium-carousel-wrapper .square-bg' => 'background: {{VALUE}};',
247
+ ],
248
+ ]
249
+ );
250
+
251
+ $this->add_control(
252
+ 'premium_carousel_arrow_border_color',
253
+ [
254
+ 'label' => esc_html__( 'Border Color', 'premium_elementor' ),
255
+ 'type' => Controls_Manager::COLOR,
256
+ 'scheme' => [
257
+ 'type' => Scheme_Color::get_type(),
258
+ 'value' => Scheme_Color::COLOR_1,
259
+ ],
260
+ 'default' => '#ffffff',
261
+ 'condition' => [
262
+ 'premium_carousel_arrow_style' => [ 'circle-border', 'square-border' ]
263
+ ],
264
+ 'selectors' => [
265
+ '{{WRAPPER}} .premium-carousel-wrapper .square-border' => 'border: solid {{VALUE}};',
266
+ '{{WRAPPER}} .premium-carousel-wrapper .circle-border' => 'border: solid {{VALUE}};',
267
+ ],
268
+ ]
269
+ );
270
+
271
+ $this->add_control(
272
+ 'premium_carousel_border_size',
273
+ [
274
+ 'label' => esc_html__( 'Border Size', 'premium_elementor' ),
275
+ 'type' => Controls_Manager::SLIDER,
276
+ 'default' => [
277
+ 'size' => 1,
278
+ ],
279
+ 'range' => [
280
+ 'px' => [
281
+ 'min' => 0,
282
+ 'max' => 60
283
+ ],
284
+ ],
285
+ 'condition' => [
286
+ 'premium_carousel_arrow_style' => [ 'circle-border', 'square-border' ]
287
+ ],
288
+ 'selectors' => [
289
+ '{{WRAPPER}} .premium-carousel-wrapper .square-border' => 'border-width: {{SIZE}}{{UNIT}};',
290
+ '{{WRAPPER}} .premium-carousel-wrapper .circle-border' => 'border-width: {{SIZE}}{{UNIT}};',
291
+ ],
292
+ ]
293
+ );
294
+
295
+ $this->add_control(
296
+ 'premium_carousel_arrow_color',
297
+ [
298
+ 'label' => esc_html__( 'Arrow Color', 'premium_elementor' ),
299
+ 'type' => Controls_Manager::COLOR,
300
+ 'scheme' => [
301
+ 'type' => Scheme_Color::get_type(),
302
+ 'value' => Scheme_Color::COLOR_1,
303
+ ],
304
+ 'default' => '#000000',
305
+ 'condition' => [
306
+ 'premium_carousel_navigation_show' => 'yes'
307
+ ],
308
+ 'selectors' => [
309
+ '{{WRAPPER}} .premium-carousel-wrapper .slick-arrow' => 'color: {{VALUE}};',
310
+ ],
311
+ ]
312
+ );
313
+
314
+ $this->add_control(
315
+ 'premium_carousel_arrow_size',
316
+ [
317
+ 'label' => esc_html__( 'Arrow Size', 'premium_elementor' ),
318
+ 'type' => Controls_Manager::SLIDER,
319
+ 'default' => [
320
+ 'size' => 14,
321
+ ],
322
+ 'range' => [
323
+ 'px' => [
324
+ 'min' => 0,
325
+ 'max' => 60
326
+ ],
327
+ ],
328
+ 'condition' => [
329
+ 'premium_carousel_navigation_show' => 'yes'
330
+ ],
331
+ 'selectors' => [
332
+ '{{WRAPPER}} .premium-carousel-wrapper .slick-arrow' => 'font-size: {{SIZE}}{{UNIT}};',
333
+ ],
334
+ ]
335
+ );
336
+
337
+
338
+ $this->add_control(
339
+ 'premium_carousel_arrow_icon_next',
340
+ [
341
+ 'label' => esc_html__( 'Select Icon for \'Next Arrow\'', 'premium_elementor' ),
342
+ 'type' => Controls_Manager::CHOOSE,
343
+ 'options' => [
344
+ 'right_arrow_bold' => [
345
+
346
+ 'icon' => 'fa fa-arrow-right',
347
+
348
+ ],
349
+ 'right_arrow_long' => [
350
+
351
+ 'icon' => 'fa fa-long-arrow-right',
352
+
353
+ ],
354
+ 'right_arrow_long_circle' => [
355
+
356
+ 'icon' => 'fa fa-arrow-circle-right',
357
+
358
+ ],
359
+ 'right_arrow_angle' => [
360
+
361
+ 'icon' => 'fa fa-angle-right',
362
+
363
+ ],
364
+ 'right_arrow_chevron' => [
365
+
366
+ 'icon' => 'fa fa-chevron-right',
367
+
368
+ ]
369
+ ],
370
+ 'default' => 'right_arrow_angle',
371
+ 'condition' => [
372
+ 'premium_carousel_navigation_show' => 'yes',
373
+ 'premium_carousel_slider_type!' => 'vertical'
374
+ ]
375
+ ]
376
+ );
377
+
378
+ // If the carousel type vertical
379
+ $this->add_control(
380
+ 'premium_carousel_arrow_icon_next_ver',
381
+ [
382
+ 'label' => esc_html__( 'Select Icon for \'Bottom Arrow\'', 'premium_elementor' ),
383
+ 'type' => Controls_Manager::CHOOSE,
384
+ 'options' => [
385
+ 'right_arrow_bold' => [
386
+
387
+ 'icon' => 'fa fa-arrow-down',
388
+
389
+ ],
390
+ 'right_arrow_long' => [
391
+
392
+ 'icon' => 'fa fa-long-arrow-down',
393
+
394
+ ],
395
+ 'right_arrow_long_circle' => [
396
+
397
+ 'icon' => 'fa fa-arrow-circle-down',
398
+
399
+ ],
400
+ 'right_arrow_angle' => [
401
+
402
+ 'icon' => 'fa fa-angle-down',
403
+
404
+ ],
405
+ 'right_arrow_chevron' => [
406
+
407
+ 'icon' => 'fa fa-chevron-down',
408
+
409
+ ]
410
+ ],
411
+ 'default' => 'right_arrow_angle',
412
+ 'condition' => [
413
+ 'premium_carousel_navigation_show' => 'yes',
414
+ 'premium_carousel_slider_type' => 'vertical',
415
+ ]
416
+ ]
417
+ );
418
+
419
+
420
+ $this->add_control(
421
+ 'premium_carousel_arrow_icon_prev',
422
+ [
423
+ 'label' => esc_html__( 'Select Icon for \'Prev Arrow\'', 'premium_elementor' ),
424
+ 'type' => Controls_Manager::CHOOSE,
425
+ 'options' => [
426
+ 'left_arrow_bold' => [
427
+
428
+ 'icon' => 'fa fa-arrow-left',
429
+
430
+ ],
431
+ 'left_arrow_long' => [
432
+
433
+ 'icon' => 'fa fa-long-arrow-left',
434
+
435
+ ],
436
+ 'left_arrow_long_circle' => [
437
+
438
+ 'icon' => 'fa fa-arrow-circle-left',
439
+
440
+ ],
441
+ 'left_arrow_angle' => [
442
+
443
+ 'icon' => 'fa fa-angle-left',
444
+
445
+ ],
446
+ 'left_arrow_chevron' => [
447
+
448
+ 'icon' => 'fa fa-chevron-left',
449
+
450
+ ]
451
+ ],
452
+ 'default' => 'left_arrow_angle',
453
+ 'condition' => [
454
+ 'premium_carousel_navigation_show' => 'yes',
455
+ 'premium_carousel_slider_type!' => 'vertical',
456
+ ]
457
+ ]
458
+ );
459
+
460
+ // If carousel slider is vertical type
461
+ $this->add_control(
462
+ 'premium_carousel_arrow_icon_prev_ver',
463
+ [
464
+ 'label' => esc_html__( 'Select Icon for \'Up Arrow\'', 'premium_elementor' ),
465
+ 'type' => Controls_Manager::CHOOSE,
466
+ 'options' => [
467
+ 'left_arrow_bold' => [
468
+
469
+ 'icon' => 'fa fa-arrow-up',
470
+
471
+ ],
472
+ 'left_arrow_long' => [
473
+
474
+ 'icon' => 'fa fa-long-arrow-up',
475
+
476
+ ],
477
+ 'left_arrow_long_circle' => [
478
+
479
+ 'icon' => 'fa fa-arrow-circle-up',
480
+
481
+ ],
482
+ 'left_arrow_angle' => [
483
+
484
+ 'icon' => 'fa fa-angle-up',
485
+
486
+ ],
487
+ 'left_arrow_chevron' => [
488
+
489
+ 'icon' => 'fa fa-chevron-up',
490
+
491
+ ]
492
+ ],
493
+ 'default' => 'left_arrow_angle',
494
+ 'condition' => [
495
+ 'premium_carousel_navigation_show' => 'yes',
496
+ 'premium_carousel_slider_type' => 'vertical',
497
+ ]
498
+ ]
499
+ );
500
+
501
+
502
+ $this->add_control(
503
+ 'premium_carousel_dot_navigation_show',
504
+ [
505
+ 'label' => esc_html__( 'Dot Navigation', 'premium_elementor' ),
506
+ 'description' => esc_html__( 'Dots Navigation show or hide', 'premium_elementor' ),
507
+ 'type' => Controls_Manager::SWITCHER,
508
+ 'default' => 'yes'
509
+ ]
510
+ );
511
+
512
+
513
+ $this->add_control(
514
+ 'premium_carousel_dot_navigation_color',
515
+ [
516
+ 'label' => esc_html__( 'Dot Navigation Color', 'premium_elementor' ),
517
+ 'type' => Controls_Manager::COLOR,
518
+ 'scheme' => [
519
+ 'type' => Scheme_Color::get_type(),
520
+ 'value' => Scheme_Color::COLOR_1,
521
+ ],
522
+ 'default' => '#8e8e8e',
523
+ 'condition' => [
524
+ 'premium_carousel_dot_navigation_show' => 'yes'
525
+ ],
526
+ 'selectors' => [
527
+ '{{WRAPPER}} ul.slick-dots li' => 'color: {{VALUE}}'
528
+ ]
529
+ ]
530
+ );
531
+
532
+
533
+ $this->add_control(
534
+ 'premium_carousel_dot_navigation_active_color',
535
+ [
536
+ 'label' => esc_html__( 'Dot Active Color', 'premium_elementor' ),
537
+ 'type' => Controls_Manager::COLOR,
538
+ 'scheme' => [
539
+ 'type' => Scheme_Color::get_type(),
540
+ 'value' => Scheme_Color::COLOR_1,
541
+ ],
542
+ 'default' => '#3d3d3d',
543
+ 'condition' => [
544
+ 'premium_carousel_dot_navigation_show' => 'yes'
545
+ ],
546
+ 'selectors' => [
547
+ '{{WRAPPER}} ul.slick-dots li.slick-active' => 'color: {{VALUE}}'
548
+ ]
549
+ ]
550
+ );
551
+
552
+ $this->add_control(
553
+ 'premium_carousel_dot_icon',
554
+ [
555
+ 'label' => esc_html__( 'Select Icon for \'Navigation Dots\'', 'premium_elementor' ),
556
+ 'type' => Controls_Manager::CHOOSE,
557
+ 'options' => [
558
+ 'square_white' => [
559
+
560
+ 'icon' => 'fa fa-square-o',
561
+
562
+ ],
563
+ 'square_black' => [
564
+
565
+ 'icon' => 'fa fa-square',
566
+
567
+ ],
568
+ 'circle_white' => [
569
+
570
+ 'icon' => 'fa fa-circle',
571
+
572
+ ],
573
+ 'circle_thin' => [
574
+
575
+ 'icon' => 'fa fa-circle-thin',
576
+
577
+ ],
578
+ 'circle_thin_bold' => [
579
+
580
+ 'icon' => 'fa fa-circle-o',
581
+
582
+ ]
583
+ ],
584
+ 'default' => 'circle_white',
585
+ 'condition' => [
586
+ 'premium_carousel_dot_navigation_show' => 'yes'
587
+ ]
588
+ ]
589
+ );
590
+
591
+ $this->end_controls_section();
592
+
593
+ $this->start_controls_section(
594
+ 'premium-carousel-advance-settings',
595
+ [
596
+ 'label' => esc_html__( 'Advance Settings' , 'premium_elementor' ),
597
+ 'tab' => Controls_Manager::TAB_STYLE
598
+ ]
599
+ );
600
+
601
+ $this->add_control(
602
+ 'premium_carousel_draggable_effect',
603
+ [
604
+ 'label' => esc_html__( 'Draggable Effect', 'premium_elementor' ),
605
+ 'description' => esc_html__( 'Do you want the draggable effect?', 'premium_elementor' ),
606
+ 'type' => Controls_Manager::SWITCHER,
607
+ 'default' => 'yes'
608
+ ]
609
+ );
610
+
611
+ $this->add_control(
612
+ 'premium_carousel_touch_move',
613
+ [
614
+ 'label' => esc_html__( 'Touch Move', 'premium_elementor' ),
615
+ 'description' => esc_html__( 'Enable slide moving with touch', 'premium_elementor' ),
616
+ 'type' => Controls_Manager::SWITCHER,
617
+ 'default' => 'yes'
618
+ ]
619
+ );
620
+
621
+ $this->add_control(
622
+ 'premium_carousel_RTL_Mode',
623
+ [
624
+ 'label' => esc_html__( 'RTL Mode', 'premium_elementor' ),
625
+ 'description' => esc_html__( 'Turn on RTL mode', 'premium_elementor' ),
626
+ 'type' => Controls_Manager::SWITCHER,
627
+ 'default' => 'no',
628
+ 'condition' => [
629
+ 'premium_carousel_slider_type!' => 'vertical'
630
+ ]
631
+ ]
632
+ );
633
+
634
+ $this->add_control(
635
+ 'premium_carousel_adaptive_height',
636
+ [
637
+ 'label' => esc_html__( 'Adaptive Height', 'premium_elementor' ),
638
+ 'description' => esc_html__( 'Turn on Adaptive Height', 'premium_elementor' ),
639
+ 'type' => Controls_Manager::SWITCHER,
640
+ 'default' => 'no'
641
+ ]
642
+ );
643
+
644
+ $this->add_control(
645
+ 'premium_carousel_pausehover',
646
+ [
647
+ 'label' => esc_html__( 'Pause on Hover', 'premium_elementor' ),
648
+ 'description' => esc_html__( 'Turn on Adaptive Height', 'premium_elementor' ),
649
+ 'type' => Controls_Manager::SWITCHER,
650
+ 'default' => 'no'
651
+ ]
652
+ );
653
+
654
+ $this->add_control(
655
+ 'premium_carousel_center_mode',
656
+ [
657
+ 'label' => esc_html__( 'Enable Center Mode of the Carousel', 'premium_elementor' ),
658
+ 'description' => esc_html__( 'Enables centered view with partial prev/next slides. Animations do not work with center mode. Slides to scroll -> \'All Visible\' do not work with center mode.', 'premium_elementor' ),
659
+ 'type' => Controls_Manager::SWITCHER,
660
+ 'default' => 'no'
661
+ ]
662
+ );
663
+
664
+ $this->add_control(
665
+ 'premium_carousel_space_btw_items',
666
+ [
667
+ 'label' => esc_html__( 'Space Between Two Ttems', 'premium_elementor' ),
668
+ 'type' => Controls_Manager::NUMBER,
669
+ 'default' => '15'
670
+ ]
671
+ );
672
+
673
+ }
674
+
675
+
676
+ protected function render() {
677
+ $settings = $this->get_settings();
678
+ $options = '';
679
+ // Carousel sliding type
680
+ if( $settings['premium_carousel_slider_type'] == 'horizontal' ){
681
+ $options .= 'vertical: false,'."\r\n";
682
+ } else if( $settings['premium_carousel_slider_type'] == 'vertical' ) {
683
+ $options .= 'vertical: true,'."\r\n";
684
+ }
685
+
686
+ // responsive carousel set up
687
+
688
+ $slides_on_desk = $settings['premium_carousel_responsive_desktop'];
689
+ if( $settings['premium_carousel_slides_to_show'] == 'all' ) {
690
+ $slide_to_scroll = $slides_on_desk;
691
+ $options .= 'slidesToScroll: ' . $slide_to_scroll . ','."\r\n";
692
+ } else {
693
+ $slide_to_scroll = 1;
694
+ $options .= 'slidesToScroll: ' . $slide_to_scroll .','."\r\n";
695
+ }
696
+
697
+ $options .= 'slidesToShow: ' .$slides_on_desk . ',';
698
+
699
+ $slides_on_tabs = $settings['premium_carousel_responsive_tabs'];
700
+ $slides_on_mob = $settings['premium_carousel_responsive_mobile'];
701
+
702
+ if( $settings['premium_carousel_responsive_tabs'] == '' ) {
703
+ $slides_on_tabs = $slides_on_desk;
704
+ }
705
+
706
+ if( $settings['premium_carousel_responsive_mobile'] == '' ) {
707
+ $slides_on_mob = $slides_on_desk;
708
+ }
709
+
710
+ $options .= 'responsive : [
711
+ {
712
+ breakpoint: 1025,
713
+ settings: {
714
+ slidesToShow: ' . $slides_on_desk . ',
715
+ slidesToScroll: ' . $slide_to_scroll . '
716
+ }
717
+ },
718
+ {
719
+ breakpoint: 769,
720
+ settings: {
721
+ slidesToShow: ' . $slides_on_tabs . ',
722
+ slidesToScroll: ' . $slides_on_tabs . '
723
+ }
724
+ },
725
+ {
726
+ breakpoint: 481,
727
+ settings: {
728
+ slidesToShow: ' . $slides_on_mob . ',
729
+ slidesToScroll: ' . $slides_on_mob . '
730
+ }
731
+ }
732
+ ],';
733
+
734
+
735
+ if( $settings['premium_carousel_loop'] == 'yes' ) {
736
+ $options . 'infinite : true,';
737
+ } else {
738
+ $options . 'infinite : false,';
739
+ }
740
+
741
+ if( $settings['premium_carousel_speed'] != '' ) {
742
+ $options .= 'speed : ' . $settings['premium_carousel_speed'].',';
743
+ }
744
+
745
+
746
+ if( $settings['premium_carousel_autoplay'] == 'yes' ) {
747
+ $options .= 'autoplay : true,';
748
+
749
+ if( $settings['premium_carousel_autoplay_speed'] !== '' ) {
750
+ $options .= 'autoplaySpeed : ' . $settings['premium_carousel_autoplay_speed'] .',';
751
+ }
752
+
753
+ }
754
+
755
+
756
+ if( $settings['premium_carousel_draggable_effect'] == 'yes' ) {
757
+ $options .= 'draggable : true,';
758
+ }
759
+
760
+ if( $settings['premium_carousel_touch_move'] == 'yes' ) {
761
+ $options .= 'touchMove : true,';
762
+ }
763
+
764
+ $dir = '';
765
+ if( $settings['premium_carousel_RTL_Mode'] == 'yes' ) {
766
+ $options .= 'rtl : true,';
767
+ $dir = 'dir="rtl"';
768
+ }
769
+
770
+ if( $settings['premium_carousel_adaptive_height'] == 'yes' ) {
771
+ $options .= 'adaptiveHeight : true,';
772
+ }
773
+
774
+ if( $settings['premium_carousel_pausehover'] == 'no' ) {
775
+ $options .= 'pauseOnHover: false,';
776
+ } else {
777
+ $options .= 'pauseOnHover: true,';
778
+ }
779
+
780
+ if( $settings['premium_carousel_center_mode'] == 'yes' ) {
781
+ $options .= 'centerMode : true,';
782
+ }
783
+
784
+ if( $settings['premium_carousel_space_btw_items'] !== '' ) {
785
+ $options .= 'centerPadding : ' . '"'.$settings['premium_carousel_space_btw_items'].'px",';
786
+ }
787
+
788
+ // Navigation arrow setting setup
789
+
790
+ if( $settings['premium_carousel_navigation_show'] == 'yes') {
791
+ $options .= 'arrows : true,';
792
+
793
+ if( $settings['premium_carousel_slider_type'] == 'vertical' ) {
794
+ $vertical_alignment = "ver-carousel-arrow";
795
+ } else {
796
+ $vertical_alignment = "carousel-arrow";
797
+ }
798
+
799
+
800
+ if( $settings['premium_carousel_arrow_style'] == 'circle-bg' ) {
801
+ $arrow_class = ' circle-bg';
802
+ }
803
+ if( $settings['premium_carousel_arrow_style'] == 'square-bg' ) {
804
+ $arrow_class = ' square-bg';
805
+ }
806
+
807
+ if( $settings['premium_carousel_arrow_style'] == 'square-border' ) {
808
+ $arrow_class = ' square-border';
809
+ }
810
+
811
+ if( $settings['premium_carousel_arrow_style'] == 'circle-border' ) {
812
+ $arrow_class = ' circle-border';
813
+ }
814
+ if( $settings['premium_carousel_arrow_style'] == 'default' ) {
815
+ $arrow_class = '';
816
+ }
817
+
818
+ if( $settings['premium_carousel_slider_type'] == 'vertical' ) {
819
+ $icon_next = $settings['premium_carousel_arrow_icon_next_ver'];
820
+ if( $icon_next == 'right_arrow_bold' ) {
821
+ $icon_next_class = 'fa fa-arrow-down';
822
+ }
823
+ if( $icon_next == 'right_arrow_long' ) {
824
+ $icon_next_class = 'fa fa-long-arrow-down';
825
+ }
826
+ if( $icon_next == 'right_arrow_long_circle' ) {
827
+ $icon_next_class = 'fa fa-arrow-circle-down';
828
+ }
829
+ if( $icon_next == 'right_arrow_angle' ) {
830
+ $icon_next_class = 'fa fa-angle-down';
831
+ }
832
+ if( $icon_next == 'right_arrow_chevron' ) {
833
+ $icon_next_class = 'fa fa-chevron-down';
834
+ }
835
+
836
+ $icon_prev = $settings['premium_carousel_arrow_icon_prev_ver'];
837
+
838
+ if( $icon_prev == 'left_arrow_bold' ) {
839
+ $icon_prev_class = 'fa fa-arrow-up';
840
+ }
841
+ if( $icon_prev == 'left_arrow_long' ) {
842
+ $icon_prev_class = 'fa fa-long-arrow-up';
843
+ }
844
+ if( $icon_prev == 'left_arrow_long_circle' ) {
845
+ $icon_prev_class = 'fa fa-arrow-circle-up';
846
+ }
847
+ if( $icon_prev == 'left_arrow_angle' ) {
848
+ $icon_prev_class = 'fa fa-angle-up';
849
+ }
850
+ if( $icon_prev == 'left_arrow_chevron' ) {
851
+ $icon_prev_class = 'fa fa-chevron-up';
852
+ }
853
+ } else {
854
+
855
+ $icon_next = $settings['premium_carousel_arrow_icon_next'];
856
+
857
+ if( $icon_next == 'right_arrow_bold' ) {
858
+ $icon_next_class = 'fa fa-arrow-right';
859
+ }
860
+ if( $icon_next == 'right_arrow_long' ) {
861
+ $icon_next_class = 'fa fa-long-arrow-right';
862
+ }
863
+ if( $icon_next == 'right_arrow_long_circle' ) {
864
+ $icon_next_class = 'fa fa-arrow-circle-right';
865
+ }
866
+ if( $icon_next == 'right_arrow_angle' ) {
867
+ $icon_next_class = 'fa fa-angle-right';
868
+ }
869
+ if( $icon_next == 'right_arrow_chevron' ) {
870
+ $icon_next_class = 'fa fa-chevron-right';
871
+ }
872
+
873
+ $icon_prev = $settings['premium_carousel_arrow_icon_prev'];
874
+
875
+ if( $icon_prev == 'left_arrow_bold' ) {
876
+ $icon_prev_class = 'fa fa-arrow-left';
877
+ }
878
+ if( $icon_prev == 'left_arrow_long' ) {
879
+ $icon_prev_class = 'fa fa-long-arrow-left';
880
+ }
881
+ if( $icon_prev == 'left_arrow_long_circle' ) {
882
+ $icon_prev_class = 'fa fa-arrow-circle-left';
883
+ }
884
+ if( $icon_prev == 'left_arrow_angle' ) {
885
+ $icon_prev_class = 'fa fa-angle-left';
886
+ }
887
+ if( $icon_prev == 'left_arrow_chevron' ) {
888
+ $icon_prev_class = 'fa fa-chevron-left';
889
+ }
890
+ }
891
+
892
+
893
+ $next_arrow = '<a type="button" data-role="none" class="'. $vertical_alignment .' carousel-next'.$arrow_class.'" aria-label="Next" role="button" style=""><i class="'.$icon_next_class.'" aria-hidden="true"></i></a>';
894
+
895
+ $left_arrow = '<a type="button" data-role="none" class="'. $vertical_alignment .' carousel-prev'.$arrow_class.'" aria-label="Next" role="button" style=""><i class="'.$icon_prev_class.'" aria-hidden="true"></i></a>';
896
+
897
+ $options .= 'nextArrow : \''.$next_arrow.'\',';
898
+ $options .= 'prevArrow : \''.$left_arrow.'\',';
899
+
900
+ } else {
901
+ $options .= 'arrows : false,';
902
+ }
903
+
904
+ if( $settings['premium_carousel_dot_navigation_show'] == 'yes' ){
905
+ $options .= 'dots: true,';
906
+
907
+ if( $settings['premium_carousel_dot_icon'] == 'square_white' ) {
908
+ $dot_icon = 'fa fa-square-o';
909
+ }
910
+ if( $settings['premium_carousel_dot_icon'] == 'square_black' ) {
911
+ $dot_icon = 'fa fa-square';
912
+ }
913
+ if( $settings['premium_carousel_dot_icon'] == 'circle_white' ) {
914
+ $dot_icon = 'fa fa-circle';
915
+ }
916
+ if( $settings['premium_carousel_dot_icon'] == 'circle_thin' ) {
917
+ $dot_icon = 'fa fa-circle-thin';
918
+ }
919
+ if( $settings['premium_carousel_dot_icon'] == 'circle_thin_bold' ) {
920
+ $dot_icon = 'fa fa-circle-o';
921
+ }
922
+
923
+ $options .= 'customPaging: function(slider, i) {
924
+ return \'<i class="' . $dot_icon . '"></i>\';
925
+ },';
926
+
927
+ }
928
+
929
+ $uid = uniqid( rand() );
930
+ $extra_class = $settings['premium_carousel_extra_class'] !== '' ? ' '.$settings['premium_carousel_extra_class'] : '';
931
+
932
+
933
+ $animation_class = $settings['premium_carousel_animation_list'];
934
+ $animation = 'class="item-wrapper" data-animation="animated ' . $animation_class .'"';
935
+
936
+ $uniqid = uniqid( rand() );
937
+ ?>
938
+ <div id="premium-carousel-wrapper-<?php echo $uniqid; ?>" class="premium-carousel-wrapper carousel-wrapper-<?php echo $uniqid; ?><?php echo $extra_class;?>" <?php echo $dir; ?>>
939
+ <div id="premium-carousel-<?php echo $uid; ?>">
940
+ <?php
941
+ $boosted_elements_page_id = is_array( $settings['premium_carousel_slider_content'] ) ? $settings['premium_carousel_slider_content'] : array();
942
+ $boosted_elements_frontend = new Frontend;
943
+
944
+ foreach( $boosted_elements_page_id as $elementor_post_id ) :
945
+ ?>
946
+ <div <?php echo $animation; ?>>
947
+ <?php echo $boosted_elements_frontend->get_builder_content($elementor_post_id, true); ?>
948
+ </div>
949
+ <?php endforeach; ?>
950
+ </div>
951
+ </div>
952
+
953
+ <script type="text/javascript">
954
+ (function( $ ) {
955
+ $(document).ready( function() {
956
+ function slideToShow( slick ) {
957
+ slidesToShow = slick.options.slidesToShow;
958
+ windowWidth = jQuery( window ).width();
959
+ if ( windowWidth < 1025 ) {
960
+ slidesToShow = slick.options.responsive[0].settings.slidesToShow;
961
+ }
962
+ if ( windowWidth < 769 ) {
963
+ slidesToShow = slick.options.responsive[1].settings.slidesToShow;
964
+ }
965
+ if ( windowWidth < 481 ) {
966
+ slidesToShow = slick.options.responsive[2].settings.slidesToShow;
967
+ }
968
+ return slidesToShow;
969
+ }
970
+ $('.carousel-wrapper-<?php echo $uniqid; ?>').on('init', function (event, slick ) {
971
+ event.preventDefault();
972
+ $('.carousel-wrapper-<?php echo $uniqid; ?> .item-wrapper.slick-active').each(function (index, el) {
973
+ $this = $(this);
974
+ $this.addClass($this.data('animation'));
975
+ });
976
+
977
+ $('.slick-track').addClass('translate');
978
+
979
+ });
980
+
981
+ $('#premium-carousel-<?php echo $uid; ?>').slick({ <?php echo $options; ?> });
982
+
983
+ $('.carousel-wrapper-<?php echo $uniqid; ?>').on('afterChange', function (event, slick, currentSlide, nextSlide) {
984
+ slidesScrolled = slick.options.slidesToScroll;
985
+ slidesToShow = slideToShow( slick );
986
+ centerMode = slick.options.centerMode;
987
+
988
+
989
+ $currentParent = slick.$slider[0].parentElement.id;
990
+ slideToAnimate = currentSlide + slidesToShow - 1;
991
+
992
+ if (slidesScrolled == 1) {
993
+ if ( centerMode == true ) {
994
+ animate = slideToAnimate - 2;
995
+ $inViewPort = $( '#' + $currentParent + " [data-slick-index='" + animate + "']");
996
+ $inViewPort.addClass($inViewPort.data('animation'));
997
+ } else {
998
+ $inViewPort = $( '#' + $currentParent + " [data-slick-index='" + slideToAnimate + "']");
999
+ $inViewPort.addClass($inViewPort.data('animation'));
1000
+ }
1001
+ } else {
1002
+ for (var i = slidesScrolled + currentSlide; i >= 0; i--) {
1003
+ $inViewPort = $( '#' + $currentParent + " [data-slick-index='" + i + "']");
1004
+ $inViewPort.addClass($inViewPort.data('animation'));
1005
+ }
1006
+
1007
+ }
1008
+ });
1009
+
1010
+ $('.carousel-wrapper-<?php echo $uniqid; ?>').on('beforeChange', function (event, slick, currentSlide) {
1011
+ $inViewPort = $("[data-slick-index='" + currentSlide + "']");
1012
+ $inViewPort.siblings().removeClass($inViewPort.data('animation'));
1013
+ });
1014
+
1015
+ <?php if( $settings['premium_carousel_slider_type'] == 'vertical' ) : ?>
1016
+ var maxHeight = -1;
1017
+ $('.slick-slide').each(function() {
1018
+ if ($(this).height() > maxHeight) {
1019
+ maxHeight = $(this).height();
1020
+ }
1021
+ });
1022
+ $('.slick-slide').each(function() {
1023
+ if ($(this).height() < maxHeight) {
1024
+ $(this).css('margin', Math.ceil((maxHeight-$(this).height())/2) + 'px 0');
1025
+ }
1026
+ });
1027
+ <?php endif; ?>
1028
+
1029
+ var marginFix = {
1030
+ element : $('a.ver-carousel-arrow'),
1031
+ getWidth : function() {
1032
+ var width = this.element.outerWidth();
1033
+ return width / 2;
1034
+ },
1035
+ setWidth : function( type = 'vertical') {
1036
+ if( type == 'vertical' ) {
1037
+ this.element.css( 'margin-left', '-' + this.getWidth() + 'px' );
1038
+ } else {
1039
+ this.element.css( 'margin-top', '-' + this.getWidth() + 'px' );
1040
+ }
1041
+
1042
+ }
1043
+ }
1044
+ marginFix.setWidth();
1045
+ marginFix.element = $('a.carousel-arrow');
1046
+ marginFix.setWidth('horizontal');
1047
+ });
1048
+ })(jQuery);
1049
+ </script>
1050
+
1051
+ <?php
1052
+
1053
+ }
1054
+ }
1055
+ Plugin::instance()->widgets_manager->register_widget_type( new Premium_Carousel_Widget() );
widgets/premium-countdown.php ADDED
@@ -0,0 +1,615 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+ if( !defined( 'ABSPATH' ) ) exit; // No access of directly access
4
+
5
+ class Premium_Counter_Down_Widget extends Widget_Base {
6
+
7
+
8
+ public function get_name() {
9
+ return 'premium-countdown-timer';
10
+ }
11
+
12
+ public function get_title() {
13
+ return esc_html__( 'Premium CountDown', 'premium_elementor' );
14
+ }
15
+
16
+ public function get_icon() {
17
+ return 'pa-pa-count';
18
+ }
19
+
20
+ public function get_script_depends() {
21
+ return [ 'countdowntimer.js' ];
22
+ }
23
+
24
+ public function get_categories() {
25
+ return [ 'premium-elements' ];
26
+ }
27
+
28
+ // Adding the controls fields for the premium countdown
29
+ // This will controls the animation, colors and background, dimensions etc
30
+ protected function _register_controls() {
31
+ $this->start_controls_section(
32
+ 'pcdt-global-settings',
33
+ [
34
+ 'label' => esc_html__( 'Premium CountDown Timer', 'premium_elementor' )
35
+ ]
36
+ );
37
+
38
+ $this->add_control(
39
+ 'pcdt-style',
40
+ [
41
+ 'label' => esc_html__( 'CountDown Style', 'premium_elementor' ),
42
+ 'type' => Controls_Manager::SELECT,
43
+ 'options' => [
44
+ 'd-u-s' => esc_html__( 'Digit and unit side by side', 'premium_elementor' ),
45
+ 'd-u-u' => esc_html__( 'Digit and unit up and down', 'premium_elementor' ),
46
+ ],
47
+ 'default' => 'd-u-s'
48
+ ]
49
+ );
50
+
51
+ $this->add_control(
52
+ 'pcdt_date_time',
53
+ [
54
+ 'label' => esc_html__( 'Target Data and Time', 'premium_elementor' ),
55
+ 'type' => Controls_Manager::DATE_TIME,
56
+ 'picker_options' => [
57
+ 'format' => 'Y/m/d H:m:s'
58
+ ],
59
+ 'default' => date( "Y/m/d H:m:s", strtotime("+ 1 day") ),
60
+ 'description' => esc_html__( 'Example Date: 2020-01-22 01:30', 'boosted-elements-progression' )
61
+ ]
62
+ );
63
+
64
+ $this->add_control(
65
+ 'pcdt_s_u_time',
66
+ [
67
+ 'label' => esc_html__( 'Countdown Timer Depends', 'premium_elementor' ),
68
+ 'type' => Controls_Manager::SELECT,
69
+ 'options' => [
70
+ 'wp-time' => esc_html__('WordPress Default', 'premium_elementor' ),
71
+ 'user-time' => esc_html__('User system', 'premium_elementor' )
72
+ ],
73
+ 'default' => 'wp-time',
74
+ 'description' => esc_html__('This will set current time from the options', 'premium_elementor')
75
+ ]
76
+ );
77
+
78
+ $this->add_control(
79
+ 'pcdt_units',
80
+ [
81
+ 'label' => esc_html__( 'Select Time Units', 'premium_elementor' ),
82
+ 'type' => Controls_Manager::SELECT2,
83
+ 'description' => esc_html__('Select Time Units To Display In Countdown Timer', 'premium_elementor' ),
84
+ 'options' => [
85
+ 'Y' => esc_html__( 'Years', 'premium_elementor' ),
86
+ 'O' => esc_html__( 'Month', 'premium_elementor' ),
87
+ 'W' => esc_html__( 'Week', 'premium_elementor' ),
88
+ 'D' => esc_html__( 'Day', 'premium_elementor' ),
89
+ 'H' => esc_html__( 'Hours', 'premium_elementor' ),
90
+ 'M' => esc_html__( 'Minutes', 'premium_elementor' ),
91
+ 'S' => esc_html__( 'Second', 'premium_elementor' ),
92
+ ],
93
+ 'default' => [
94
+ 'D',
95
+ 'H',
96
+ 'M',
97
+ 'S'
98
+ ],
99
+ 'multiple' => true,
100
+ 'separator' => 'after'
101
+ ]
102
+ );
103
+
104
+ $this->add_responsive_control(
105
+ 'separator_width',
106
+ [
107
+ 'label' => esc_html__( 'Separator Width', 'premium_elementor' ),
108
+ 'type' => Controls_Manager::SLIDER,
109
+ 'default' => [
110
+ 'size' => 30,
111
+ ],
112
+ 'range' => [
113
+ 'px' => [
114
+ 'min' => 0,
115
+ 'max' => 200,
116
+ ]
117
+ ],
118
+ 'selectors' => [
119
+ '{{WRAPPER}} .countdown .pre_countdown-section' => 'margin-right: {{SIZE}}{{UNIT}};'
120
+ ]
121
+ ]
122
+ );
123
+
124
+ $this->add_control(
125
+ 'timer_border_style',
126
+ [
127
+ 'label' => esc_html__( 'Timer digit Border Style', 'premium_elementor' ),
128
+ 'type' => Controls_Manager::SELECT,
129
+ 'options' => [
130
+ 'none' => esc_html__('None', 'premium_elementor' ),
131
+ 'solid' => esc_html__('Solid', 'premium_elementor' ),
132
+ 'dashed' => esc_html__('Dashed', 'premium_elementor' ),
133
+ 'dotted' => esc_html__('Dotted', 'premium_elementor' ),
134
+ 'double' => esc_html__('Double', 'premium_elementor' ),
135
+ 'inset' => esc_html__('Inset', 'premium_elementor' ),
136
+ 'outset' => esc_html__('Outset', 'premium_elementor' ),
137
+ ],
138
+ 'default' => 'none',
139
+
140
+ ]
141
+ );
142
+
143
+ $this->add_responsive_control(
144
+ 'digit_border_size',
145
+ [
146
+ 'label' => esc_html__( 'Digit Border Size', 'premium_elementor' ),
147
+ 'type' => Controls_Manager::SLIDER,
148
+ 'default' => [
149
+ 'size' => 2,
150
+ ],
151
+ 'range' => [
152
+ 'px' => [
153
+ 'min' => 0,
154
+ 'max' => 50,
155
+ ]
156
+ ],
157
+ 'condition' => [
158
+ 'timer_border_style!' => 'none'
159
+ ],
160
+ 'selectors' => [
161
+ '{{WRAPPER}} .border .pre_countdown-section .pre_countdown-amount' => 'border-width: {{SIZE}}{{UNIT}};'
162
+ ]
163
+ ]
164
+ );
165
+
166
+
167
+ $this->add_control(
168
+ 'digit_border_color',
169
+ [
170
+ 'label' => esc_html__( 'Digit Border Color', 'premium_elementor' ),
171
+ 'type' => Controls_Manager::COLOR,
172
+ 'scheme' => [
173
+ 'type' => Scheme_Color::get_type(),
174
+ 'value' => Scheme_Color::COLOR_2,
175
+ ],
176
+ 'condition' => [
177
+ 'timer_border_style!' => 'none'
178
+ ],
179
+ 'selectors' => [
180
+ '{{WRAPPER}} .border .pre_countdown-section .pre_countdown-amount' => 'border-color: {{VALUE}};'
181
+ ]
182
+ ]
183
+ );
184
+
185
+
186
+ $this->add_responsive_control(
187
+ 'digit_border_radius',
188
+ [
189
+ 'label' => esc_html__( 'Digit Border Radius', 'premium_elementor' ),
190
+ 'type' => Controls_Manager::SLIDER,
191
+ 'default' => [
192
+ 'size' => 2,
193
+ ],
194
+ 'range' => [
195
+ 'px' => [
196
+ 'min' => 1,
197
+ 'max' => 100,
198
+ ],
199
+ ],
200
+ 'condition' => [
201
+ 'timer_border_style!' => 'none'
202
+ ],
203
+ 'selectors' => [
204
+ '{{WRAPPER}} .border .pre_countdown-section .pre_countdown-amount' => 'border-radius: {{SIZE}}%;'
205
+ ]
206
+ ]
207
+ );
208
+
209
+
210
+ $this->add_control(
211
+ 'timer_digit_bg_color',
212
+ [
213
+ 'label' => esc_html__( 'Digit Background Color', 'premium_elementor' ),
214
+ 'type' => Controls_Manager::COLOR,
215
+ 'scheme' => [
216
+ 'type' => Scheme_Color::get_type(),
217
+ 'value' => Scheme_Color::COLOR_1,
218
+ ],
219
+ 'selectors' => [
220
+ '{{WRAPPER}} .countdown .pre_countdown-section .pre_countdown-amount' => 'background-color: {{VALUE}};'
221
+ ]
222
+ ]
223
+ );
224
+
225
+ $this->add_responsive_control(
226
+ 'digit_bg_size',
227
+ [
228
+ 'label' => esc_html__( 'Digit Background Size', 'premium_elementor' ),
229
+ 'type' => Controls_Manager::SLIDER,
230
+ 'default' => [
231
+ 'size' => 50,
232
+ ],
233
+ 'range' => [
234
+ 'px' => [
235
+ 'min' => 1,
236
+ 'max' => 200,
237
+ ]
238
+ ],
239
+ 'selectors' => [
240
+ '{{WRAPPER}} .countdown .pre_countdown-section .pre_countdown-amount' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};'
241
+ ]
242
+ ]
243
+ );
244
+
245
+ $this->end_controls_section();
246
+
247
+ $this->start_controls_section(
248
+ 'on_expire_settings',
249
+ [
250
+ 'label' => esc_html__( 'Expire Settings' , 'premium_elementor' )
251
+ ]
252
+ );
253
+
254
+ $this->add_control(
255
+ 'expire_text_url',
256
+ [
257
+ 'label' => esc_html__('Expire Text or redirection', 'premium_elementor'),
258
+ 'label_block' => false,
259
+ 'type' => Controls_Manager::SELECT,
260
+ 'options' => [
261
+ 'text' => esc_html__('Text', 'premium_elementor'),
262
+ 'url' => esc_html__('URL', 'premium_elementor')
263
+ ],
264
+ 'default' => 'text'
265
+ ]
266
+ );
267
+
268
+ $this->add_control(
269
+ 'expiry_text_',
270
+ [
271
+ 'label' => esc_html__('On expiry Text', 'premium_elementor'),
272
+ 'type' => Controls_Manager::WYSIWYG,
273
+ 'default' => '<h1>Count Down is finished!</h1>',
274
+ 'condition' => [
275
+ 'expire_text_url' => 'text'
276
+ ]
277
+ ]
278
+ );
279
+
280
+ $this->add_control(
281
+ 'expiry_redirection_',
282
+ [
283
+ 'label' => esc_html__('Redirect To', 'premium_elementor'),
284
+ 'type' => Controls_Manager::URL,
285
+ 'condition' => [
286
+ 'expire_text_url' => 'url'
287
+ ],
288
+ 'default' => [
289
+ 'url' => get_permalink( 1 )
290
+ ]
291
+ ]
292
+ );
293
+
294
+
295
+
296
+ $this->end_controls_section();
297
+
298
+ $this->start_controls_section(
299
+ 'pcdt_transaltion',
300
+ [
301
+ 'label' => esc_html__( 'Transaltion Settings' , 'premium_elementor' )
302
+ ]
303
+ );
304
+
305
+ $this->add_control(
306
+ 'day_singular',
307
+ [
308
+ 'label' => esc_html__( 'Day (Singular)', 'premium_elementor' ),
309
+ 'type' => Controls_Manager::TEXT,
310
+ 'default' => 'Day'
311
+ ]
312
+ );
313
+
314
+ $this->add_control(
315
+ 'day_plural',
316
+ [
317
+ 'label' => esc_html__( 'Day (Plural)', 'premium_elementor' ),
318
+ 'type' => Controls_Manager::TEXT,
319
+ 'default' => 'Days'
320
+ ]
321
+ );
322
+
323
+ $this->add_control(
324
+ 'week_singular',
325
+ [
326
+ 'label' => esc_html__( 'Week (Singular)', 'premium_elementor' ),
327
+ 'type' => Controls_Manager::TEXT,
328
+ 'default' => 'Week'
329
+ ]
330
+ );
331
+
332
+ $this->add_control(
333
+ 'week_plural',
334
+ [
335
+ 'label' => esc_html__( 'Weeks (Plural)', 'premium_elementor' ),
336
+ 'type' => Controls_Manager::TEXT,
337
+ 'default' => 'Weeks'
338
+ ]
339
+ );
340
+
341
+
342
+ $this->add_control(
343
+ 'month_singular',
344
+ [
345
+ 'label' => esc_html__( 'Month (Singular)', 'premium_elementor' ),
346
+ 'type' => Controls_Manager::TEXT,
347
+ 'default' => 'Month'
348
+ ]
349
+ );
350
+
351
+
352
+ $this->add_control(
353
+ 'month_plural',
354
+ [
355
+ 'label' => esc_html__( 'Months (Plural)', 'premium_elementor' ),
356
+ 'type' => Controls_Manager::TEXT,
357
+ 'default' => 'Months'
358
+ ]
359
+ );
360
+
361
+
362
+ $this->add_control(
363
+ 'year_singular',
364
+ [
365
+ 'label' => esc_html__( 'Year (Singular)', 'premium_elementor' ),
366
+ 'type' => Controls_Manager::TEXT,
367
+ 'default' => 'Year'
368
+ ]
369
+ );
370
+
371
+
372
+ $this->add_control(
373
+ 'year_plural',
374
+ [
375
+ 'label' => esc_html__( 'Years (Plural)', 'premium_elementor' ),
376
+ 'type' => Controls_Manager::TEXT,
377
+ 'default' => 'Years'
378
+ ]
379
+ );
380
+
381
+
382
+ $this->add_control(
383
+ 'hour_singular',
384
+ [
385
+ 'label' => esc_html__( 'Hour (Singular)', 'premium_elementor' ),
386
+ 'type' => Controls_Manager::TEXT,
387
+ 'default' => 'Hour'
388
+ ]
389
+ );
390
+
391
+
392
+ $this->add_control(
393
+ 'hour_plural',
394
+ [
395
+ 'label' => esc_html__( 'Hours (Plural)', 'premium_elementor' ),
396
+ 'type' => Controls_Manager::TEXT,
397
+ 'default' => 'Hours'
398
+ ]
399
+ );
400
+
401
+
402
+ $this->add_control(
403
+ 'minute_singular',
404
+ [
405
+ 'label' => esc_html__( 'Minute (Singular)', 'premium_elementor' ),
406
+ 'type' => Controls_Manager::TEXT,
407
+ 'default' => 'Minute'
408
+ ]
409
+ );
410
+
411
+ $this->add_control(
412
+ 'minute_plural',
413
+ [
414
+ 'label' => esc_html__( 'Minutes (Plural)', 'premium_elementor' ),
415
+ 'type' => Controls_Manager::TEXT,
416
+ 'default' => 'Minutes'
417
+ ]
418
+ );
419
+
420
+ $this->add_control(
421
+ 'second_plural',
422
+ [
423
+ 'label' => esc_html__( 'Seconds (Plural)', 'premium_elementor' ),
424
+ 'type' => Controls_Manager::TEXT,
425
+ 'default' => 'Seconds'
426
+ ]
427
+ );
428
+
429
+ $this->add_control(
430
+ 'second_singular',
431
+ [
432
+ 'label' => esc_html__( 'Second (Singular)', 'premium_elementor' ),
433
+ 'type' => Controls_Manager::TEXT,
434
+ 'default' => 'Second',
435
+ 'separator' => 'after'
436
+ ]
437
+ );
438
+
439
+ $this->end_controls_section();
440
+
441
+ $this->start_controls_section(
442
+ 'pcdt_typhography',
443
+ [
444
+ 'label' => esc_html__( 'Typhography Settings' , 'premium_elementor' ),
445
+ 'tab' => Controls_Manager::TAB_STYLE
446
+ ]
447
+ );
448
+
449
+ $this->add_control(
450
+ 'digit_color',
451
+ [
452
+ 'label' => esc_html__( 'Timer Digit colors', 'premium_elementor' ),
453
+ 'type' => Controls_Manager::COLOR,
454
+ 'scheme' => [
455
+ 'type' => Scheme_Color::get_type(),
456
+ 'value' => Scheme_Color::COLOR_2,
457
+ ],
458
+ 'selectors' => [
459
+ '{{WRAPPER}} .countdown .pre_countdown-section .pre_countdown-amount' => 'color: {{VALUE}};'
460
+ ]
461
+ ]
462
+ );
463
+
464
+ $this->add_group_control(
465
+ Group_Control_Typography::get_type(),
466
+ [
467
+ 'name' => 'digit_typho',
468
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
469
+ 'selector' => '{{WRAPPER}} .countdown .pre_countdown-section .pre_countdown-amount',
470
+ 'separator' => 'after'
471
+ ]
472
+ );
473
+
474
+ $this->add_control(
475
+ 'unit_color',
476
+ [
477
+ 'label' => esc_html__( 'Timer Unit colors', 'premium_elementor' ),
478
+ 'type' => Controls_Manager::COLOR,
479
+ 'scheme' => [
480
+ 'type' => Scheme_Color::get_type(),
481
+ 'value' => Scheme_Color::COLOR_2,
482
+ ],
483
+ 'selectors' => [
484
+ '{{WRAPPER}} .countdown .pre_countdown-section .pre_countdown-period' => 'color: {{VALUE}};'
485
+ ]
486
+ ]
487
+ );
488
+
489
+ $this->add_group_control(
490
+ Group_Control_Typography::get_type(),
491
+ [
492
+ 'name' => 'unit_typho',
493
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
494
+ 'selector' => '{{WRAPPER}} .countdown .pre_countdown-section .pre_countdown-period',
495
+ 'separator' => 'after'
496
+ ]
497
+ );
498
+
499
+ $this->end_controls_section();
500
+ }
501
+
502
+ protected function render( ) {
503
+
504
+ $settings = $this->get_settings();
505
+
506
+ $target_date = $settings['pcdt_date_time'];
507
+ $formats = $settings['pcdt_units'];
508
+ $format = implode('', $formats );
509
+ $time = str_replace('-', '/', current_time('mysql') );
510
+ $serverSync = '';
511
+ if( $settings['pcdt_s_u_time'] == 'wp-time' ) :
512
+ $serverSync = 'serverSync : function() { return new Date(\'' .$time .'\') }';
513
+ endif;
514
+
515
+ $redirect = !empty( $settings['expiry_redirection_'] ) ? $settings['expiry_redirection_']['url'] : '';
516
+
517
+ // Singular labels set up
518
+ $y = !empty( $settings['year_singular'] ) ? $settings['year_singular'] : 'Year';
519
+ $m = !empty( $settings['month_singular'] ) ? $settings['month_singular'] : 'Month';
520
+ $w = !empty( $settings['week_singular'] ) ? $settings['week_singular'] : 'Week';
521
+ $d = !empty( $settings['day_singular'] ) ? $settings['day_singular'] : 'Day';
522
+ $h = !empty( $settings['hour_singular'] ) ? $settings['hour_singular'] : 'Hour';
523
+ $mi = !empty( $settings['minute_singular'] ) ? $settings['minute_singular'] : 'Minute';
524
+ $s = !empty( $settings['second_singular'] ) ? $settings['second_singular'] : 'Second';
525
+ $label = $y."," . $m ."," . $w ."," . $d ."," . $h ."," . $mi ."," . $s;
526
+
527
+ // Plural labels set up
528
+ $ys = !empty( $settings['year_plural'] ) ? $settings['year_plural'] : 'Years';
529
+ $ms = !empty( $settings['month_plural'] ) ? $settings['month_plural'] : 'Months';
530
+ $ws = !empty( $settings['week_plural'] ) ? $settings['week_plural'] : 'Weeks';
531
+ $ds = !empty( $settings['day_plural'] ) ? $settings['day_plural'] : 'Days';
532
+ $hs = !empty( $settings['hour_plural'] ) ? $settings['hour_plural'] : 'Hours';
533
+ $mis = !empty( $settings['minute_plural'] ) ? $settings['minute_plural'] : 'Minutes';
534
+ $ss = !empty( $settings['second_plural'] ) ? $settings['second_plural'] : 'Seconds';
535
+ $labels1 = $ys."," . $ms ."," . $ws ."," . $ds ."," . $hs ."," . $mis ."," . $ss;
536
+ $expire_text = $settings['expiry_text_'];
537
+
538
+ $expire_text = str_replace( "\\", "\\\\", $expire_text );
539
+ $expire_text = str_replace( '"', '\"', $expire_text );
540
+
541
+
542
+ $pcdt_style = $settings['pcdt-style'] == 'd-u-s' ? ' side' : ' down';
543
+ $border_style = $settings['timer_border_style'] .' border';
544
+ $unid = $this->get_id();
545
+ ?>
546
+ <div id="countDownContiner">
547
+ <div class="countdown<?php echo $pcdt_style; ?> <?php echo $border_style; ?>" id="countdown-<?php echo $unid?>"></div>
548
+ </div>
549
+ <script>
550
+ ( function( $ ) {
551
+ $(document).ready( function() {
552
+ var label1 = '<?php echo $label; ?>',
553
+ label2 = '<?php echo $labels1; ?>',
554
+ newLabe1 = label1.split(','),
555
+ newLabe2 = label2.split(',');
556
+
557
+ $('#countdown-<?php echo $unid?>').pre_countdown({
558
+ labels : newLabe2,
559
+ labels1 : newLabe1,
560
+ until : new Date( '<?php echo $target_date; ?>'),
561
+ format : '<?php echo $format; ?>',
562
+ padZeroes : true,
563
+ <?php if( $settings['expire_text_url'] == 'text' ): ?>
564
+ onExpiry : function() {
565
+ $(this).html("<?php echo $expire_text; ?>");
566
+ },
567
+ <?php endif; ?>
568
+ <?php if( $settings['expire_text_url'] == 'url' ): ?>
569
+ expiryUrl : '<?php echo $redirect; ?>',
570
+ <?php endif; ?>
571
+ <?php echo $serverSync; ?>
572
+ });
573
+ times = $('#countdown-<?php echo $unid?>').pre_countdown('getTimes');
574
+ function runTimer( el ) {
575
+ return el == 0;
576
+ }
577
+ if( times.every( runTimer ) ) {
578
+ <?php if( $settings['expire_text_url'] == 'text' ): ?>
579
+ $('#countdown-<?php echo $unid?>').html("<?php echo $expire_text; ?>");
580
+ <?php endif; ?>
581
+ <?php if( $settings['expire_text_url'] == 'url' ): ?>
582
+ var editMode = $('body').find('#elementor').length;
583
+ if( editMode > 0 ) {
584
+ $('#countdown-<?php echo $unid?>').html( '<h1>You can not redirect url from elementor Editor!!</h1>' );
585
+ } else {
586
+ window.location.href = '<?php echo $redirect; ?>';
587
+ }
588
+
589
+ <?php endif; ?>
590
+ }
591
+ });
592
+
593
+ // On duplicate load everything on iframe load
594
+ $('.elementor-element-overlay .elementor-editor-element-duplicate').on('click', function() {
595
+ var $this = $(this);
596
+ parentId = $this.parents('section.elementor-element');
597
+
598
+ if( parentId.find('#countDownContiner').length ) {
599
+ document.location.href = document.location.href;
600
+ }
601
+
602
+ });
603
+
604
+ })( jQuery );
605
+
606
+ </script>
607
+
608
+ <?php
609
+
610
+ }
611
+
612
+
613
+ }
614
+
615
+ Plugin::instance()->widgets_manager->register_widget_type( new Premium_Counter_Down_Widget() );
widgets/premium-counter.php ADDED
@@ -0,0 +1,639 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+ if( !defined( 'ABSPATH' ) ) exit; // No access of directly access
4
+
5
+
6
+ class Premium_Counter_Widget extends Widget_Base {
7
+
8
+ public function get_name() {
9
+ return 'premium-counter';
10
+ }
11
+
12
+ public function get_title() {
13
+ return esc_html__( 'Premium Counter', 'premium_elementor' );
14
+ }
15
+
16
+ public function get_icon() {
17
+ return 'pa-pa-counter';
18
+ }
19
+
20
+ public function get_script_depends() {
21
+ return [ 'countup.js' ];
22
+ }
23
+
24
+ public function get_categories() {
25
+ return [ 'premium-elements' ];
26
+ }
27
+
28
+ // Adding the controls fields for the premium counter
29
+ // This will controls the animation, colors and background, dimensions etc
30
+ protected function _register_controls() {
31
+ $this->start_controls_section('pct-global-settings',
32
+ [
33
+ 'label' => esc_html__( 'Premium Counter', 'premium_elementor' )
34
+ ]
35
+ );
36
+
37
+ $this->add_control('pct_icon_image',
38
+ [
39
+ 'label' => esc_html__( 'Icon or Image Upload', 'premium_elementor' ),
40
+ 'type' => Controls_Manager::SELECT,
41
+ 'options' => [
42
+ 'icon' => esc_html__('Icon Select', 'premium_elementor'),
43
+ 'custom' => esc_html__( 'Your Custom Image', 'premium_elementor')
44
+ ],
45
+ 'default' => 'icon'
46
+ ]
47
+ );
48
+
49
+ $this->add_control('pct-icon',
50
+ [
51
+ 'label' => esc_html__( 'Select Icon', 'premium_elementor' ),
52
+ 'type' => Controls_Manager::ICON,
53
+ 'default' => 'fa fa-clock-o',
54
+ 'condition' => [
55
+ 'pct_icon_image' => 'icon'
56
+ ]
57
+ ]
58
+ );
59
+
60
+ $this->add_control('pct_image_upload',
61
+ [
62
+ 'label' => esc_html__( 'Upload Image', 'premium_elementor' ),
63
+ 'type' => Controls_Manager::MEDIA,
64
+ 'condition' => [
65
+ 'pct_icon_image' => 'custom'
66
+ ],
67
+ 'default' => [
68
+ 'url' => Utils::get_placeholder_image_src(),
69
+ ]
70
+ ]
71
+ );
72
+
73
+ $this->add_responsive_control('pct-icon-size',
74
+ [
75
+ 'label' => esc_html__( 'Size of Icon', 'premium_elementor' ),
76
+ 'type' => Controls_Manager::SLIDER,
77
+ 'default' => [
78
+ 'size' => 25,
79
+ ],
80
+ 'range' => [
81
+ 'px' => [
82
+ 'min' => 10,
83
+ 'max' => 200,
84
+ ]
85
+ ],
86
+ 'selectors' => [
87
+ '{{WRAPPER}} .counter-area .counter-icon .icon' => 'font-size: {{SIZE}}{{UNIT}};'
88
+ ],
89
+ 'condition' => [
90
+ 'pct_icon_image' => 'icon'
91
+ ]
92
+ ]
93
+ );
94
+
95
+ $this->add_responsive_control('pct_image_size',
96
+ [
97
+ 'label' => esc_html__( 'Size of Image', 'premium_elementor' ),
98
+ 'type' => Controls_Manager::SLIDER,
99
+ 'default' => [
100
+ 'size' => 60,
101
+ ],
102
+ 'range' => [
103
+ 'px' => [
104
+ 'min' => 0,
105
+ 'max' => 100,
106
+ ]
107
+ ],
108
+ 'selectors' => [
109
+ '{{WRAPPER}} .counter-area .counter-icon img.custom-image' => 'width: {{SIZE}}%;'
110
+ ],
111
+ 'condition' => [
112
+ 'pct_icon_image' => 'custom'
113
+ ]
114
+ ]
115
+ );
116
+
117
+ $this->add_control('pct-icon-color',
118
+ [
119
+ 'label' => esc_html__( 'Icon Color', 'premium_elementor' ),
120
+ 'type' => Controls_Manager::COLOR,
121
+ 'scheme' => [
122
+ 'type' => Scheme_Color::get_type(),
123
+ 'value' => Scheme_Color::COLOR_1,
124
+ ],
125
+ 'selectors' => [
126
+ '{{WRAPPER}} .counter-area .counter-icon .icon' => 'color: {{VALUE}};'
127
+ ],
128
+ 'condition' => [
129
+ 'pct_icon_image' => 'icon'
130
+ ]
131
+ ]
132
+ );
133
+
134
+ $this->add_control('pct_icon_style',
135
+ [
136
+ 'label' => esc_html__( 'Icon Style', 'premium_elementor' ),
137
+ 'type' => Controls_Manager::SELECT,
138
+ 'options' => [
139
+ 'simple' => esc_html__( 'Simple', 'premium_elementor' ),
140
+ 'circle' => esc_html__( 'Circle Background', 'premium_elementor' ),
141
+ 'square' => esc_html__( 'Square Background', 'premium_elementor' ),
142
+ 'design' => esc_html__( 'Your Design', 'premium_elementor' )
143
+ ],
144
+ 'default' => 'simple'
145
+ ]
146
+ );
147
+
148
+ $this->add_control('pct_icon_bg',
149
+ [
150
+ 'label' => esc_html__( 'Background Color', 'premium_elementor' ),
151
+ 'type' => Controls_Manager::COLOR,
152
+ 'scheme' => [
153
+ 'type' => Scheme_Color::get_type(),
154
+ 'value' => Scheme_Color::COLOR_1,
155
+ ],
156
+ 'condition' => [
157
+ 'pct_icon_style!' => 'simple'
158
+ ],
159
+ 'selectors' => [
160
+ '{{WRAPPER}} .counter-area .counter-icon .icon-bg' => 'background: {{VALUE}};'
161
+ ]
162
+ ]
163
+ );
164
+
165
+ $this->add_responsive_control('pct_icon_bg_size',
166
+ [
167
+ 'label' => esc_html__( 'Background size', 'premium_elementor' ),
168
+ 'type' => Controls_Manager::SLIDER,
169
+ 'default' => [
170
+ 'size' => 150,
171
+ ],
172
+ 'range' => [
173
+ 'px' => [
174
+ 'min' => 1,
175
+ 'max' => 600,
176
+ ]
177
+ ],
178
+ 'condition' => [
179
+ 'pct_icon_style!' => 'simple'
180
+ ],
181
+ 'selectors' => [
182
+ '{{WRAPPER}} .counter-area .counter-icon span.icon' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};'
183
+ ]
184
+ ]
185
+ );
186
+
187
+ $this->add_responsive_control('pct_icon_v_align',
188
+ [
189
+ 'label' => esc_html__( 'Icon vertical Align', 'premium_elementor' ),
190
+ 'type' => Controls_Manager::SLIDER,
191
+ 'default' => [
192
+ 'size' => 150,
193
+ ],
194
+ 'range' => [
195
+ 'px' => [
196
+ 'min' => 1,
197
+ 'max' => 600,
198
+ ]
199
+ ],
200
+ 'condition' => [
201
+ 'pct_icon_style!' => 'simple'
202
+ ],
203
+ 'selectors' => [
204
+ '{{WRAPPER}} .counter-area .counter-icon span.icon' => 'line-height: {{SIZE}}{{UNIT}};'
205
+ ]
206
+ ]
207
+ );
208
+
209
+ $this->add_control('icon_border_style',
210
+ [
211
+ 'label' => esc_html__( 'Icon Border Style', 'premium_elementor' ),
212
+ 'type' => Controls_Manager::SELECT,
213
+ 'options' => [
214
+ 'none' => esc_html__('None', 'premium_elementor' ),
215
+ 'solid' => esc_html__('Solid', 'premium_elementor' ),
216
+ 'dashed' => esc_html__('Dashed', 'premium_elementor' ),
217
+ 'dotted' => esc_html__('Dotted', 'premium_elementor' ),
218
+ 'double' => esc_html__('Double', 'premium_elementor' ),
219
+ 'inset' => esc_html__('Inset', 'premium_elementor' ),
220
+ 'outset' => esc_html__('Outset', 'premium_elementor' ),
221
+ ],
222
+ 'default' => 'none',
223
+ 'condition' => [
224
+ 'pct_icon_style' => 'design'
225
+ ]
226
+ ]
227
+ );
228
+
229
+ $this->add_control('pct_icon_border_color',
230
+ [
231
+ 'label' => esc_html__( 'Border Color', 'premium_elementor' ),
232
+ 'type' => Controls_Manager::COLOR,
233
+ 'scheme' => [
234
+ 'type' => Scheme_Color::get_type(),
235
+ 'value' => Scheme_Color::COLOR_1,
236
+ ],
237
+ 'condition' => [
238
+ 'icon_border_style!' => 'none',
239
+ 'pct_icon_style' => 'design'
240
+ ],
241
+ 'selectors' => [
242
+ '{{WRAPPER}} .counter-area .counter-icon .design' => 'border-color: {{VALUE}};'
243
+ ]
244
+ ]
245
+ );
246
+
247
+ $this->add_responsive_control('pct_icon_border_width',
248
+ [
249
+ 'label' => esc_html__( 'Border Width', 'premium_elementor' ),
250
+ 'type' => Controls_Manager::SLIDER,
251
+ 'default' => [
252
+ 'size' => 1,
253
+ ],
254
+ 'range' => [
255
+ 'px' => [
256
+ 'min' => 0,
257
+ 'max' => 20,
258
+ ]
259
+ ],
260
+ 'condition' => [
261
+ 'icon_border_style!' => 'none',
262
+ 'pct_icon_style' => 'design'
263
+ ],
264
+ 'selectors' => [
265
+ '{{WRAPPER}} .counter-area .counter-icon .design' => 'border-width: {{SIZE}}{{UNIT}};'
266
+ ]
267
+ ]
268
+ );
269
+
270
+ $this->add_responsive_control('pct_icon_border_radius',
271
+ [
272
+ 'label' => esc_html__( 'Border Radius', 'premium_elementor' ),
273
+ 'type' => Controls_Manager::SLIDER,
274
+ 'default' => [
275
+ 'size' => 300,
276
+ ],
277
+ 'range' => [
278
+ 'px' => [
279
+ 'min' => 0,
280
+ 'max' => 1000,
281
+ ]
282
+ ],
283
+ 'condition' => [
284
+ 'icon_border_style!' => 'none',
285
+ 'pct_icon_style' => 'design'
286
+ ],
287
+ 'selectors' => [
288
+ '{{WRAPPER}} .counter-area .counter-icon .design' => 'border-radius: {{SIZE}}{{UNIT}};'
289
+ ]
290
+ ]
291
+ );
292
+
293
+ $this->add_control('pct_icon_animation',
294
+ [
295
+ 'label' => esc_html__( 'Animations', 'premium_elementor' ),
296
+ 'type' => Controls_Manager::SELECT,
297
+ 'default' => 'no-animation',
298
+ 'options' => [
299
+ 'no-animation' => esc_html__( 'Default', 'premium_elementor' ),
300
+ 'swing' => esc_html__( 'Swing', 'premium_elementor' ),
301
+ 'pulse' => esc_html__( 'Pulse', 'premium_elementor' ),
302
+ 'fadeIn' => esc_html__( 'Fade In', 'premium_elementor' ),
303
+ 'fadeInUp' => esc_html__( 'Fade In Up', 'premium_elementor' ),
304
+ 'fadeInDown' => esc_html__( 'Fade In Down', 'premium_elementor' ),
305
+ 'fadeInLeft' => esc_html__( 'Fade In Left', 'premium_elementor' ),
306
+ 'fadeInRight' => esc_html__( 'Fade In Right', 'premium_elementor' ),
307
+ 'fadeInUpBig' => esc_html__( 'Fade In Up Long', 'premium_elementor' ),
308
+ 'fadeInDownBig' => esc_html__( 'Fade In Down Long', 'premium_elementor' ),
309
+ 'fadeInLeftBig' => esc_html__( 'Fade In Left Long', 'premium_elementor' ),
310
+ 'fadeInRightBig' => esc_html__( 'Fade In Right Long', 'premium_elementor' ),
311
+ 'slideInUp' => esc_html__( 'Slide In Up', 'premium_elementor' ),
312
+ 'slideInDown' => esc_html__( 'Slide In Down', 'premium_elementor' ),
313
+ 'slideInLeft' => esc_html__( 'Slide In Left', 'premium_elementor' ),
314
+ 'slideInRight' => esc_html__( 'Slide In Right', 'premium_elementor' ),
315
+ 'bounceIn' => esc_html__( 'Bounce In', 'premium_elementor' ),
316
+ 'bounceInUp' => esc_html__( 'Bounce In Up', 'premium_elementor' ),
317
+ 'bounceInDown' => esc_html__( 'Bounce In Down', 'premium_elementor' ),
318
+ 'bounceInLeft' => esc_html__( 'Bounce In Left', 'premium_elementor' ),
319
+ 'bounceInRight' => esc_html__( 'Bounce In Right', 'premium_elementor' ),
320
+ 'rotateIn' => esc_html__( 'Rotate In', 'premium_elementor' ),
321
+ 'lightSpeedIn' => esc_html__( 'Light Speed In', 'premium_elementor' ),
322
+ 'rollIn' => esc_html__( 'Roll In', 'premium_elementor' ),
323
+ ]
324
+ ]
325
+ );
326
+
327
+ $this->add_control('pct_icon_position',
328
+ [
329
+ 'label' => esc_html__( 'Icon Position', 'premium_elementor' ),
330
+ 'type' => Controls_Manager::SELECT,
331
+ 'default' => 'no-animation',
332
+ 'options' => [
333
+ 'top' => esc_html__( 'Top', 'premium_elementor' ),
334
+ 'right' => esc_html__( 'Right', 'premium_elementor' ),
335
+ 'left' => esc_html__( 'Left', 'premium_elementor' ),
336
+
337
+ ],
338
+ 'default' => 'top',
339
+ 'separator' => 'after'
340
+ ]
341
+ );
342
+
343
+
344
+ $this->end_controls_section();
345
+
346
+ $this->start_controls_section('pct_counter_setting',
347
+ [
348
+ 'label' => esc_html__( 'Counter Settings' , 'premium_elementor' )
349
+ ]
350
+ );
351
+
352
+ $this->add_control('pct_title',
353
+ [
354
+ 'label' => esc_html__( 'Counter Title', 'premium_elementor' ),
355
+ 'type' => Controls_Manager::TEXT,
356
+ 'description' => esc_html__( 'Enter title for stats counter block', 'premium_elementor' )
357
+ ]
358
+ );
359
+
360
+ $this->add_control('pct_value',
361
+ [
362
+ 'label' => esc_html__( 'Counter Value', 'premium_elementor' ),
363
+ 'type' => Controls_Manager::NUMBER,
364
+ 'description' => esc_html__( 'Enter Cunter Value', 'premium_elementor' ),
365
+ 'default' => 500
366
+ ]
367
+ );
368
+
369
+ $this->add_control('pct_t_separator',
370
+ [
371
+ 'label' => esc_html__( 'Thousands Separator', 'premium_elementor' ),
372
+ 'type' => Controls_Manager::TEXT,
373
+ 'description' => esc_html__( 'Separate coverts 125000 into 125,000', 'premium_elementor' ),
374
+ 'default' => ','
375
+ ]
376
+ );
377
+
378
+ $this->add_control('pct_d_separator',
379
+ [
380
+ 'label' => esc_html__( 'Replace Decimal Point With', 'premium_elementor' ),
381
+ 'type' => Controls_Manager::TEXT,
382
+ 'description' => esc_html__( 'Eg - 12.76, . will be replaced with value that you will enter above.', 'premium_elementor' ),
383
+ 'default' => '.'
384
+ ]
385
+ );
386
+
387
+ $this->add_control('pct_d_after',
388
+ [
389
+ 'label' => esc_html__( 'Digits after decimal point', 'premium_elementor' ),
390
+ 'type' => Controls_Manager::NUMBER,
391
+ 'default' => 0
392
+ ]
393
+ );
394
+
395
+ $this->add_control('pct_preffix',
396
+ [
397
+ 'label' => esc_html__( 'Counter Value Prefix', 'premium_elementor' ),
398
+ 'type' => Controls_Manager::TEXT,
399
+ 'description' => esc_html__( 'Enter prefix for counter value', 'premium_elementor' )
400
+ ]
401
+ );
402
+
403
+ $this->add_control('pct_suffix',
404
+ [
405
+ 'label' => esc_html__( 'Counter Value suffix', 'premium_elementor' ),
406
+ 'type' => Controls_Manager::TEXT,
407
+ 'description' => esc_html__( 'Enter suffix for counter value', 'premium_elementor' )
408
+ ]
409
+ );
410
+
411
+ $this->add_control('pct_speed',
412
+ [
413
+ 'label' => esc_html__( 'Counter rolling time', 'premium_elementor' ),
414
+ 'type' => Controls_Manager::NUMBER,
415
+ 'description' => esc_html__( 'How many seconds the counter should roll IN SECONDS?', 'premium_elementor' ),
416
+ 'default' => 3
417
+ ]
418
+ );
419
+
420
+ $this->end_controls_section();
421
+
422
+ $this->start_controls_section('pct_typhography',
423
+ [
424
+ 'label' => esc_html__( 'Typhography Settings' , 'premium_elementor' ),
425
+ 'tab' => Controls_Manager::TAB_STYLE
426
+ ]
427
+ );
428
+
429
+ $this->add_control('pct_title_color',
430
+ [
431
+ 'label' => esc_html__( 'Title Color', 'premium_elementor' ),
432
+ 'type' => Controls_Manager::COLOR,
433
+ 'scheme' => [
434
+ 'type' => Scheme_Color::get_type(),
435
+ 'value' => Scheme_Color::COLOR_1,
436
+ ],
437
+ 'selectors' => [
438
+ '{{WRAPPER}} .counter-area .counter-title' => 'color: {{VALUE}};'
439
+ ]
440
+ ]
441
+ );
442
+
443
+ $this->add_group_control(
444
+ Group_Control_Typography::get_type(),
445
+ [
446
+ 'name' => 'pct_title_typho',
447
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
448
+ 'selector' => '{{WRAPPER}} .counter-area .counter-title',
449
+ 'separator' => 'after'
450
+ ]
451
+ );
452
+
453
+ $this->add_control('pct_value_color',
454
+ [
455
+ 'label' => esc_html__( 'Value Color', 'premium_elementor' ),
456
+ 'type' => Controls_Manager::COLOR,
457
+ 'scheme' => [
458
+ 'type' => Scheme_Color::get_type(),
459
+ 'value' => Scheme_Color::COLOR_1,
460
+ ],
461
+ 'selectors' => [
462
+ '{{WRAPPER}} .counter-area .counter-init' => 'color: {{VALUE}};'
463
+ ]
464
+ ]
465
+ );
466
+
467
+ $this->add_group_control(
468
+ Group_Control_Typography::get_type(),
469
+ [
470
+ 'name' => 'pct_value_typho',
471
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
472
+ 'selector' => '{{WRAPPER}} .counter-area .counter-init',
473
+ 'separator' => 'after'
474
+ ]
475
+ );
476
+
477
+ $this->add_control('pct_suffix_prefix',
478
+ [
479
+ 'label' => esc_html__( 'Suffix-prefix Color', 'premium_elementor' ),
480
+ 'type' => Controls_Manager::COLOR,
481
+ 'scheme' => [
482
+ 'type' => Scheme_Color::get_type(),
483
+ 'value' => Scheme_Color::COLOR_1,
484
+ ],
485
+ 'selectors' => [
486
+ '{{WRAPPER}} .counter-area span#suffix-prefix' => 'color: {{VALUE}}'
487
+ ]
488
+ ]
489
+ );
490
+
491
+ $this->add_group_control(
492
+ Group_Control_Typography::get_type(),
493
+ [
494
+ 'name' => 'pct_su_pre_typho',
495
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
496
+ 'selector' => '{{WRAPPER}} .counter-area span#suffix-prefix'
497
+ ]
498
+ );
499
+
500
+ $this->end_controls_section();
501
+
502
+ }
503
+
504
+ protected function render() {
505
+ $settings = $this->get_settings();
506
+
507
+ $options = ''; // The counter settings store
508
+ $options .= 'useEasing : true,';
509
+
510
+ if( $sep = $settings['pct_t_separator'] ) {
511
+ $options .= 'separator : \''. $sep .'\',';
512
+ }
513
+ if( $dec = $settings['pct_d_separator'] ) {
514
+ $options .= 'decimal : \''. $dec .'\',';
515
+ }
516
+
517
+ $prefix = !empty( $settings['pct_preffix'] ) ? '<span id="suffix-prefix" class="counter-su-pre"> '. $settings['pct_preffix'] .'</span>' : '';
518
+ $suffix = !empty( $settings['pct_suffix'] ) ? '<span id="suffix-prefix" class="counter-su-pre">'. $settings['pct_suffix'] .' </span>' : '';
519
+ $title = !empty( $settings['pct_title'] ) ? '<h2 class="counter-title">'. $settings['pct_title'] .'</h2>' : '';
520
+
521
+ if( $settings['pct_icon_image'] == 'icon' ) {
522
+ $icon_image = '<i class="' . $settings['pct-icon'] .'"></i>';
523
+ } else {
524
+ $icon_image = '<img class="custom-image" src="'.$settings['pct_image_upload']['url'] . '" alt="">';
525
+ }
526
+
527
+ $icon_style = $settings['pct_icon_style'] != 'simple' ? ' icon-bg ' . $settings['pct_icon_style'] : '';
528
+ $border = $settings['icon_border_style'];
529
+ $animation = $settings['pct_icon_animation'];
530
+
531
+ $position = $settings['pct_icon_position'];
532
+ $center = $position == 'top' ? ' center' : '';
533
+ $left = $position == 'left' ? ' left' : '';
534
+
535
+ $counter_value = !empty( $settings['pct_value'] ) ? $settings['pct_value'] : 500;
536
+ $speed = !empty( $settings['pct_speed'] ) ? $settings['pct_speed'] : 3;
537
+ $d_after = !empty( $settings['pct_d_after'] ) ? intval( $settings['pct_d_after'] ) : 0;
538
+ $rand = rand( 100, 1000 );
539
+ $d_s = !empty( $settings['pct_d_separator'] ) ? $settings['pct_d_separator'] : '.';
540
+ $t_s = !empty( $settings['pct_t_separator'] ) ? $settings['pct_t_separator'] : ',';
541
+ $exact_value = number_format( $counter_value, $d_after, $d_s, $t_s );
542
+ $flex_width = '';
543
+ if( $settings['pct_icon_image'] == 'custom' && $settings['pct_icon_style'] == 'simple' ) {
544
+ $flex_width = ' flex-width ';
545
+ }
546
+ ?>
547
+
548
+ <div class="counter-area<?php echo $center; ?>" id="counter-wrapper-<?php echo uniqid(); ?>">
549
+ <?php if( $position == 'right' ) : ?>
550
+ <div class="init-wrapper <?php echo $position; ?>">
551
+ <?php echo $prefix; ?>
552
+ <span class="counter-init" id="counter-<?php echo $rand; ?>"><?php echo $exact_value; ?></span>
553
+ <?php echo $suffix; ?>
554
+ <?php echo $title; ?>
555
+ </div>
556
+
557
+ <?php if( !empty( $settings['pct-icon'] ) || !empty( $settings['pct_image_upload'] ) ) : ?>
558
+ <div class="counter-icon <?php echo $position; ?>">
559
+ <span data-animation="<?php echo $animation; ?>" class="icon<?php echo $flex_width; ?><?php echo $icon_style; ?><?php echo ' ' . $border; ?>"><?php echo $icon_image; ?></span>
560
+ </div>
561
+ <?php endif; ?>
562
+
563
+ <?php else: ?>
564
+
565
+ <?php if( !empty( $settings['pct-icon'] ) || !empty( $settings['pct_image_upload'] ) ) : ?>
566
+ <div class="counter-icon<?php echo $left; ?>">
567
+ <span data-animation="<?php echo $animation; ?>" class="icon<?php echo $flex_width; ?><?php echo $icon_style; ?><?php echo ' ' . $border; ?>"><?php echo $icon_image; ?></span>
568
+ </div>
569
+ <?php endif; ?>
570
+
571
+ <div class="init-wrapper<?php echo $left; ?>">
572
+ <?php echo $prefix; ?>
573
+ <span class="counter-init" id="counter-<?php echo $rand; ?>"><?php echo $exact_value; ?></span>
574
+ <?php echo $suffix; ?>
575
+ <?php echo $title; ?>
576
+ </div>
577
+
578
+ <?php endif; ?>
579
+
580
+ </div>
581
+ <script type="text/javascript">
582
+ ( function( $ ) {
583
+ $(document).ready( function() {
584
+
585
+ var counter = new CountUp(
586
+ 'counter-<?php echo $rand ; ?>', 0,
587
+ <?php echo $counter_value; ?>,
588
+ <?php echo $d_after; ?>,
589
+ <?php echo $speed ; ?>,
590
+ { <?php echo $options ?> }
591
+ );
592
+
593
+ if (!counter.error) {
594
+    counter.start();
595
+ } else {
596
+    console.error(counter.error);
597
+ }
598
+
599
+ function isScrolledIntoView(elem) {
600
+ var docViewTop = $(window).scrollTop();
601
+ var docViewBottom = docViewTop + $(window).height();
602
+
603
+ var elemTop = elem.offset().top;
604
+ var elemBottom = elemTop + elem.height();
605
+
606
+ return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
607
+ }
608
+
609
+ function addAnimation() {
610
+ $('.counter-init').each( function() {
611
+ var $this = $(this),
612
+ parentId = $this.parents('.counter-area').attr('id'),
613
+ iconClass = $('#' + parentId ).find('.icon'),
614
+ animation = iconClass.data('animation');
615
+
616
+ if( iconClass.length ) {
617
+ if( isScrolledIntoView( iconClass ) ) {
618
+ if( ! iconClass.hasClass('animated') ) {
619
+ $('#' + parentId ).find('.icon').addClass('animated ' + animation );
620
+ }
621
+ }
622
+ }
623
+
624
+ });
625
+ }
626
+ addAnimation();
627
+ $(window).on('scroll', function() {
628
+ addAnimation();
629
+ });
630
+
631
+ });
632
+ })( jQuery );
633
+ </script>
634
+ <?php
635
+ }
636
+
637
+ }
638
+
639
+ Plugin::instance()->widgets_manager->register_widget_type( new Premium_Counter_Widget() );
widgets/premium-dual-header.php ADDED
@@ -0,0 +1,392 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Dual_Header_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-dual-header';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Dual Header', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-header';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium dual header
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ /*Start General Section*/
35
+ $this->start_controls_section('premium_dual_header_general_settings',
36
+ [
37
+ 'label' => esc_html__('General Settings', 'premium_elementor')
38
+ ]
39
+ );
40
+
41
+ /*First Header*/
42
+ $this->add_control('premium_dual_header_first_header_text',
43
+ [
44
+ 'label' => esc_html__('First Header', 'premium_elementor'),
45
+ 'type' => Controls_Manager::TEXT,
46
+ 'default' => esc_html__('Premium', 'premium_elementor'),
47
+ 'label_block' => true,
48
+ ]
49
+ );
50
+
51
+ /*Title Tag*/
52
+ $this->add_control('premium_dual_header_first_header_tag',
53
+ [
54
+ 'label' => esc_html__('First Header Tag', 'premium_elementor'),
55
+ 'type' => Controls_Manager::SELECT,
56
+ 'default' => 'h2',
57
+ 'options' => [
58
+ 'h1' => esc_html__('H1'),
59
+ 'h2' => esc_html__('H2'),
60
+ 'h3' => esc_html__('H3'),
61
+ 'h4' => esc_html__('H4'),
62
+ 'h5' => esc_html__('H5'),
63
+ 'h6' => esc_html__('H6')
64
+ ],
65
+ 'label_block' => true,
66
+ ]
67
+ );
68
+
69
+
70
+ /*Second Header*/
71
+ $this->add_control('premium_dual_header_second_header_text',
72
+ [
73
+ 'label' => esc_html__('Second Header', 'premium_elementor'),
74
+ 'type' => Controls_Manager::TEXT,
75
+ 'default' => esc_html__('Addons', 'premium_elementor'),
76
+ 'label_block' => true,
77
+ ]
78
+ );
79
+
80
+ /*Title Tag*/
81
+ $this->add_control('premium_dual_header_second_header_tag',
82
+ [
83
+ 'label' => esc_html__('Second Header Tag', 'premium_elementor'),
84
+ 'type' => Controls_Manager::SELECT,
85
+ 'default' => 'h2',
86
+ 'options' => [
87
+ 'h1' => esc_html__('H1'),
88
+ 'h2' => esc_html__('H2'),
89
+ 'h3' => esc_html__('H3'),
90
+ 'h4' => esc_html__('H4'),
91
+ 'h5' => esc_html__('H5'),
92
+ 'h6' => esc_html__('H6')
93
+ ],
94
+ 'label_block' => true,
95
+ ]
96
+ );
97
+
98
+ /*Text Align*/
99
+ $this->add_responsive_control('premium_dual_header_text_align',
100
+ [
101
+ 'label' => esc_html__( 'Text Align', 'elementor' ),
102
+ 'type' => Controls_Manager::CHOOSE,
103
+ 'options' => [
104
+ 'left' => [
105
+ 'title'=> esc_html__( 'Left', 'elementor' ),
106
+ 'icon' => 'fa fa-align-left',
107
+ ],
108
+ 'center' => [
109
+ 'title'=> esc_html__( 'Center', 'elementor' ),
110
+ 'icon' => 'fa fa-align-center',
111
+ ],
112
+ 'right' => [
113
+ 'title'=> esc_html__( 'Right', 'elementor' ),
114
+ 'icon' => 'fa fa-align-right',
115
+ ],
116
+ ],
117
+ 'default' => 'center',
118
+ 'selectors' => [
119
+ '{{WRAPPER}} .premium-dual-header-container' => 'text-align: {{VALUE}};',
120
+ ],
121
+ ]
122
+ );
123
+
124
+ /*End General Settings Section*/
125
+ $this->end_controls_section();
126
+
127
+ /*Start First Header Styling Section*/
128
+ $this->start_controls_section('premium_dual_header_first_style',
129
+ [
130
+ 'label' => esc_html__('First Header', 'premium_elementor'),
131
+ 'tab' => Controls_Manager::TAB_STYLE,
132
+ ]
133
+ );
134
+
135
+ /*First Typography*/
136
+ $this->add_group_control(
137
+ Group_Control_Typography::get_type(),
138
+ [
139
+ 'name' => 'first_header_typography',
140
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
141
+ 'selector' => '{{WRAPPER}} .premium-dual-header-first-header',
142
+ ]
143
+ );
144
+
145
+ /*First Coloring Style*/
146
+ $this->add_control('premium_dual_header_first_back_clip',
147
+ [
148
+ 'label' => esc_html__('Select Header Coloring Style', 'premium_elementor'),
149
+ 'type' => Controls_Manager::SELECT,
150
+ 'default' => 'color',
151
+ 'description' => esc_html__('Choose ‘Background’ style to put a background behind the text. Choose ‘Clipped’ style so the background will be clipped on the text.','premium_elementor'),
152
+ 'options' => [
153
+ 'color' => esc_html__('Background', 'premium_elementor'),
154
+ 'clipped' => esc_html__('Clipped', 'premium_elementor'),
155
+ ],
156
+ 'label_block' => true,
157
+ ]
158
+ );
159
+
160
+ /*First Color*/
161
+ $this->add_control('premium_dual_header_first_color',
162
+ [
163
+ 'label' => esc_html__('Text Color', 'premium_elementor'),
164
+ 'type' => Controls_Manager::COLOR,
165
+ 'default' => '#7a7a7a',
166
+ 'condition' => [
167
+ 'premium_dual_header_first_back_clip' => 'color',
168
+ ],
169
+ 'selectors' => [
170
+ '{{WRAPPER}} .premium-dual-header-first-header' => 'color: {{VALUE}};',
171
+ ]
172
+ ]
173
+ );
174
+
175
+ /*First Background Color*/
176
+ $this->add_group_control(
177
+ Group_Control_Background::get_type(),
178
+ [
179
+ 'name' => 'premium_dual_header_first_background',
180
+ 'types' => [ 'classic' , 'gradient' ],
181
+ 'condition' => [
182
+ 'premium_dual_header_first_back_clip' => 'color',
183
+ ],
184
+ 'selector' => '{{WRAPPER}} .premium-dual-header-first-header',
185
+ ]
186
+ );
187
+
188
+ /*First Clip*/
189
+ $this->add_group_control(
190
+ Group_Control_Background::get_type(),
191
+ [
192
+ 'name' => 'premium_dual_header_first_clipped_background',
193
+ 'types' => [ 'classic' , 'gradient' ],
194
+ 'condition' => [
195
+ 'premium_dual_header_first_back_clip' => 'clipped',
196
+ ],
197
+ 'selector' => '{{WRAPPER}} .premium-dual-header-first-header',
198
+ ]
199
+ );
200
+
201
+ /*First Border*/
202
+ $this->add_group_control(
203
+ Group_Control_Border::get_type(),
204
+ [
205
+ 'name' => 'first-header-border',
206
+ 'selector' => '{{WRAPPER}} .premium-dual-header-first-header',
207
+ ]
208
+ );
209
+
210
+ /*First Border Radius*/
211
+ $this->add_control('premium_dual_header_first_border_radius',
212
+ [
213
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
214
+ 'type' => Controls_Manager::SLIDER,
215
+ 'size_units' => ['px', '%', 'em'],
216
+ 'selectors' => [
217
+ '{{WRAPPER}} .premium-dual-header-first-header' => 'border-radius: {{SIZE}}{{UNIT}};'
218
+ ]
219
+ ]
220
+ );
221
+
222
+ /*First Margin*/
223
+ $this->add_responsive_control('premium_dual_header_first_margin',
224
+ [
225
+ 'label' => esc_html__('Margin', 'premium_elementor'),
226
+ 'type' => Controls_Manager::DIMENSIONS,
227
+ 'size_units' => [ 'px', 'em', '%' ],
228
+ 'selectors' => [
229
+ '{{WRAPPER}} .premium-dual-header-first-header' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}',
230
+ ]
231
+ ]
232
+ );
233
+
234
+ /*First Padding*/
235
+ $this->add_responsive_control('premium_dual_header_first_padding',
236
+ [
237
+ 'label' => esc_html__('Padding', 'premium_elementor'),
238
+ 'type' => Controls_Manager::DIMENSIONS,
239
+ 'size_units' => [ 'px', 'em', '%' ],
240
+ 'selectors' => [
241
+ '{{WRAPPER}} .premium-dual-header-first-header' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}',
242
+ ]
243
+ ]
244
+ );
245
+
246
+ /*End First Header Styling Section*/
247
+ $this->end_controls_section();
248
+
249
+ /*Start First Header Styling Section*/
250
+ $this->start_controls_section('premium_dual_header_second_style',
251
+ [
252
+ 'label' => esc_html__('Second Header', 'premium_elementor'),
253
+ 'tab' => Controls_Manager::TAB_STYLE,
254
+ ]
255
+ );
256
+
257
+ /*Second Typography*/
258
+ $this->add_group_control(
259
+ Group_Control_Typography::get_type(),
260
+ [
261
+ 'name' => 'second_header_typography',
262
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
263
+ 'selector' => '{{WRAPPER}} .premium-dual-header-second-header',
264
+ ]
265
+ );
266
+
267
+ /*Second Coloring Style*/
268
+ $this->add_control('premium_dual_header_second_back_clip',
269
+ [
270
+ 'label' => esc_html__('Select Header Coloring Style', 'premium_elementor'),
271
+ 'type' => Controls_Manager::SELECT,
272
+ 'default' => 'color',
273
+ 'options' => [
274
+ 'color' => esc_html__('Text Color & Background Color', 'premium_elementor'),
275
+ 'clipped' => esc_html__('Clipped', 'premium_elementor'),
276
+ ],
277
+ 'label_block' => true,
278
+ ]
279
+ );
280
+
281
+ /*Second Color*/
282
+ $this->add_control('premium_dual_header_second_color',
283
+ [
284
+ 'label' => esc_html__('Text Color', 'premium_elementor'),
285
+ 'type' => Controls_Manager::COLOR,
286
+ 'default' => '#6ec1e4',
287
+ 'condition' => [
288
+ 'premium_dual_header_second_back_clip' => 'color',
289
+ ],
290
+ 'selectors' => [
291
+ '{{WRAPPER}} .premium-dual-header-second-header' => 'color: {{VALUE}};',
292
+ ]
293
+ ]
294
+ );
295
+
296
+ /*Second Background Color*/
297
+ $this->add_group_control(
298
+ Group_Control_Background::get_type(),
299
+ [
300
+ 'name' => 'premium_dual_header_second_background',
301
+ 'types' => [ 'classic' , 'gradient' ],
302
+ 'condition' => [
303
+ 'premium_dual_header_second_back_clip' => 'color',
304
+ ],
305
+ 'selector' => '{{WRAPPER}} .premium-dual-header-second-header',
306
+ ]
307
+ );
308
+
309
+ /*Second Clip*/
310
+ $this->add_group_control(
311
+ Group_Control_Background::get_type(),
312
+ [
313
+ 'name' => 'premium_dual_header_second_clipped_background',
314
+ 'types' => [ 'classic' , 'gradient' ],
315
+ 'condition' => [
316
+ 'premium_dual_header_second_back_clip' => 'clipped',
317
+ ],
318
+ 'selector' => '{{WRAPPER}} .premium-dual-header-second-header',
319
+ ]
320
+ );
321
+
322
+ /*Second Border*/
323
+ $this->add_group_control(
324
+ Group_Control_Border::get_type(),
325
+ [
326
+ 'name' => 'second-header-border',
327
+ 'selector' => '{{WRAPPER}} .premium-dual-header-second-header',
328
+ ]
329
+ );
330
+
331
+ /*Second Border Radius*/
332
+ $this->add_control('premium_dual_header_second_border_radius',
333
+ [
334
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
335
+ 'type' => Controls_Manager::SLIDER,
336
+ 'size_units' => ['px', '%', 'em'],
337
+ 'selectors' => [
338
+ '{{WRAPPER}} .premium-dual-header-second-header' => 'border-radius: {{SIZE}}{{UNIT}};'
339
+ ]
340
+ ]
341
+ );
342
+
343
+ /*Second Margin*/
344
+ $this->add_responsive_control('premium_dual_header_second_margin',
345
+ [
346
+ 'label' => esc_html__('Margin', 'premium_elementor'),
347
+ 'type' => Controls_Manager::DIMENSIONS,
348
+ 'size_units' => [ 'px', 'em', '%' ],
349
+ 'selectors' => [
350
+ '{{WRAPPER}} .premium-dual-header-second-header' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}',
351
+ ]
352
+ ]
353
+ );
354
+
355
+ /*Second Padding*/
356
+ $this->add_responsive_control('premium_dual_header_second_padding',
357
+ [
358
+ 'label' => esc_html__('Padding', 'premium_elementor'),
359
+ 'type' => Controls_Manager::DIMENSIONS,
360
+ 'size_units' => [ 'px', 'em', '%' ],
361
+ 'selectors' => [
362
+ '{{WRAPPER}} .premium-dual-header-second-header' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}',
363
+ ]
364
+ ]
365
+ );
366
+
367
+ /*End Second Header Styling Section*/
368
+ $this->end_controls_section();
369
+
370
+ }
371
+
372
+ protected function render($instance = [])
373
+ {
374
+ // get our input from the widget settings.
375
+ $settings = $this->get_settings();
376
+ $first_title_tag = $settings['premium_dual_header_first_header_tag'];
377
+ $second_title_tag = $settings['premium_dual_header_second_header_tag'];
378
+ if( $settings['premium_dual_header_first_back_clip'] === 'clipped' ) : $first_clip = "premium-dual-header-first-clip"; endif;
379
+ if( $settings['premium_dual_header_second_back_clip'] === 'clipped' ) : $second_clip = "premium-dual-header-second-clip"; endif;
380
+ $full_first_title_tag = '<' . $first_title_tag . ' class="premium-dual-header-first-header ' . $first_clip . '">' . $settings['premium_dual_header_first_header_text'] . '</' . $settings['premium_dual_header_first_header_tag'] . '>';
381
+ $full_second_title_tag = '<' . $second_title_tag . ' class="premium-dual-header-second-header ' . $second_clip . '">' . $settings['premium_dual_header_second_header_text'] . '</' . $settings['premium_dual_header_second_header_tag'] . '>';
382
+ ?>
383
+
384
+ <div class="premium-dual-header-container">
385
+ <?php if ( !empty ( $settings['premium_dual_header_first_header_text'] ) ) : echo $full_first_title_tag; endif; ?>
386
+ <?php if ( !empty ( $settings['premium_dual_header_second_header_text'] ) ) : echo $full_second_title_tag; endif; ?>
387
+ </div>
388
+
389
+ <?php
390
+ }
391
+ }
392
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Dual_Header_Widget());
widgets/premium-fancytext.php ADDED
@@ -0,0 +1,424 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Fancy_Text_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-fancy-text';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Fancy Text', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-typing';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium fancy text
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ /*Start Text Content Section*/
35
+ $this->start_controls_section('premium_fancy_text_content',
36
+ [
37
+ 'label' => esc_html__('Text Content', 'premium_elementor'),
38
+ ]
39
+ );
40
+
41
+ /*Prefix Text*/
42
+ $this->add_control('premium_fancy_prefix_text',
43
+ [
44
+ 'label' => esc_html__('Prefix Text', 'premium_elementor'),
45
+ 'type' => Controls_Manager::TEXT,
46
+ 'default' => esc_html__('This is', 'premium_elementor'),
47
+ 'description' => esc_html__( 'Text before Fancy text', 'premium_elementor' ),
48
+ 'label_block' => true,
49
+ ]
50
+ );
51
+
52
+ /*Fancy Text Strings*/
53
+ $this->add_control('premium_fancy_text_strings',
54
+ [
55
+ 'label' => esc_html__( 'Fancy Text Strings', 'premium_elementor' ),
56
+ 'type' => Controls_Manager::REPEATER,
57
+ 'default' => [
58
+ [
59
+ 'premium_text_strings_text_field' => esc_html__( 'Designer', 'premium_elementor' ),
60
+ ],
61
+ [
62
+ 'premium_text_strings_text_field' => esc_html__( 'Developers', 'premium_elementor' ),
63
+ ],
64
+ [
65
+ 'premium_text_strings_text_field' => esc_html__( 'Awesome', 'premium_elementor' ),
66
+ ],
67
+ ],
68
+ 'fields' => [
69
+ [
70
+ 'name' => 'premium_text_strings_text_field',
71
+ 'label' => esc_html__( 'Fancy String', 'premium_elementor' ),
72
+ 'type' => Controls_Manager::TEXT,
73
+ 'label_block' => true,
74
+ ],
75
+ ],
76
+ 'title_field' => '{{{ premium_text_strings_text_field }}}',
77
+ ]
78
+ );
79
+
80
+ /*Prefix Text*/
81
+ $this->add_control('premium_fancy_suffix_text',
82
+ [
83
+ 'label' => esc_html__('Suffix Text', 'premium_elementor'),
84
+ 'type' => Controls_Manager::TEXT,
85
+ 'default' => esc_html__('Text', 'premium_elementor'),
86
+ 'description' => esc_html__( 'Text after Fancy text', 'premium_elementor' ),
87
+ 'label_block' => true,
88
+ ]
89
+ );
90
+
91
+ /*Text Effect*/
92
+ $this->add_control('premium_fancy_text_effect',
93
+ [
94
+ 'label' => esc_html__('Effect', 'premium_elementor'),
95
+ 'type' => Controls_Manager::SELECT,
96
+ 'description' => esc_html__( 'Choose an Effect', 'premium_elementor' ),
97
+ 'options' => [
98
+ 'typing'=> esc_html__('Type Writer'),
99
+ 'slide' => esc_html__('Slide Up'),
100
+ ],
101
+ 'default' => 'typing',
102
+ 'label_block' => true,
103
+ ]
104
+ );
105
+
106
+ /*Type Speed*/
107
+ $this->add_control('premium_fancy_text_type_speed',
108
+ [
109
+ 'label' => esc_html__('Type Speed (Milliseconds)', 'premium_elementor'),
110
+ 'type' => Controls_Manager::NUMBER,
111
+ 'default' => 30,
112
+ 'description' => esc_html__( 'Speed at which line progresses / Speed of typing effect.', 'premium_elementor' ),
113
+ 'condition' => [
114
+ 'premium_fancy_text_effect' => 'typing',
115
+ ],
116
+ 'label_block' => true,
117
+ ]
118
+ );
119
+
120
+ /*Back Speed*/
121
+ $this->add_control('premium_fancy_text_back_speed',
122
+ [
123
+ 'label' => esc_html__('Back Speed (Milliseconds)', 'premium_elementor'),
124
+ 'type' => Controls_Manager::NUMBER,
125
+ 'default' => 30,
126
+ 'description' => esc_html__( 'Speed of delete / backspace effect.', 'premium_elementor' ),
127
+ 'condition' => [
128
+ 'premium_fancy_text_effect' => 'typing',
129
+ ],
130
+ 'label_block' => true,
131
+ ]
132
+ );
133
+
134
+ /*Start Delay*/
135
+ $this->add_control('premium_fancy_text_start_delay',
136
+ [
137
+ 'label' => esc_html__('Start Delay (Milliseconds)', 'premium_elementor'),
138
+ 'type' => Controls_Manager::NUMBER,
139
+ 'default' => 30,
140
+ 'description' => esc_html__( 'Example - If set to 5000, the first string will appear after 5 seconds.', 'premium_elementor' ),
141
+ 'condition' => [
142
+ 'premium_fancy_text_effect' => 'typing',
143
+ ],
144
+ 'label_block' => true,
145
+ ]
146
+ );
147
+
148
+ /*Back Delay*/
149
+ $this->add_control('premium_fancy_text_back_delay',
150
+ [
151
+ 'label' => esc_html__('Back Delay (Milliseconds)', 'premium_elementor'),
152
+ 'type' => Controls_Manager::NUMBER,
153
+ 'default' => 30,
154
+ 'description' => esc_html__( 'Example - If set to 5000, the string will remain visible for 5 seconds before backspace effect.', 'premium_elementor' ),
155
+ 'condition' => [
156
+ 'premium_fancy_text_effect' => 'typing',
157
+ ],
158
+ 'label_block' => true,
159
+ ]
160
+ );
161
+
162
+ /*Type Loop*/
163
+ $this->add_control('premium_fancy_text_type_loop',
164
+ [
165
+ 'label' => esc_html__('Loop','premium_elementor'),
166
+ 'type' => Controls_Manager::SWITCHER,
167
+ 'default' => 'yes',
168
+ 'condition' => [
169
+ 'premium_fancy_text_effect' => 'typing',
170
+ ],
171
+ ]
172
+ );
173
+
174
+ /*Show Cursor*/
175
+ $this->add_control('premium_fancy_text_show_cursor',
176
+ [
177
+ 'label' => esc_html__('Show Cursor','premium_elementor'),
178
+ 'type' => Controls_Manager::SWITCHER,
179
+ 'default' => 'yes',
180
+ 'condition' => [
181
+ 'premium_fancy_text_effect' => 'typing',
182
+ ],
183
+ ]
184
+ );
185
+
186
+ /*Cursor Text*/
187
+ $this->add_control('premium_fancy_text_cursor_text',
188
+ [
189
+ 'label' => esc_html__('Cursor Text', 'premium_elementor'),
190
+ 'type' => Controls_Manager::TEXT,
191
+ 'default' => esc_html__('|','premium_elementor'),
192
+ 'condition' => [
193
+ 'premium_fancy_text_effect' => 'typing',
194
+ ],
195
+ ]
196
+ );
197
+
198
+ /*Slide Up Speed*/
199
+ $this->add_control('premium_slide_up_speed',
200
+ [
201
+ 'label' => esc_html__('Animation Speed (Milliseconds)', 'premium_elementor'),
202
+ 'type' => Controls_Manager::NUMBER,
203
+ 'default' => 200,
204
+ 'description' => esc_html__( 'Duration of Slide Up animation', 'premium_elementor' ),
205
+ 'condition' => [
206
+ 'premium_fancy_text_effect' => 'slide',
207
+ ],
208
+ 'label_block' => true,
209
+ ]
210
+ );
211
+
212
+ /*Slide Up Pause Time*/
213
+ $this->add_control('premium_slide_up_pause_time',
214
+ [
215
+ 'label' => esc_html__('Pause Time (Milliseconds)', 'premium_elementor'),
216
+ 'type' => Controls_Manager::NUMBER,
217
+ 'default' => 3000,
218
+ 'description' => esc_html__( 'How long the string should stay visible?', 'premium_elementor' ),
219
+ 'condition' => [
220
+ 'premium_fancy_text_effect' => 'slide',
221
+ ],
222
+ 'label_block' => true,
223
+ ]
224
+ );
225
+
226
+ /*Slide Up Shown Items*/
227
+ $this->add_control('premium_slide_up_shown_items',
228
+ [
229
+ 'label' => esc_html__('Show Items (Milliseconds)', 'premium_elementor'),
230
+ 'type' => Controls_Manager::NUMBER,
231
+ 'default' => 1,
232
+ 'description' => esc_html__( 'How many items should be visible at a time?', 'premium_elementor' ),
233
+ 'condition' => [
234
+ 'premium_fancy_text_effect' => 'slide',
235
+ ],
236
+ 'label_block' => true,
237
+ ]
238
+ );
239
+
240
+ /*Pause on Hover*/
241
+ $this->add_control('premium_slide_up_hover_pause',
242
+ [
243
+ 'label' => esc_html__('Pause on Hover','premium_elementor'),
244
+ 'type' => Controls_Manager::SWITCHER,
245
+ 'default' => 'no',
246
+ 'condition' => [
247
+ 'premium_fancy_text_effect' => 'slide',
248
+ ],
249
+ ]
250
+ );
251
+
252
+ /*Front Text Align*/
253
+ $this->add_responsive_control('premium_fancy_text_align',
254
+ [
255
+ 'label' => esc_html__( 'Text Align', 'elementor' ),
256
+ 'type' => Controls_Manager::CHOOSE,
257
+ 'options' => [
258
+ 'left' => [
259
+ 'title'=> esc_html__( 'Left', 'elementor' ),
260
+ 'icon' => 'fa fa-align-left',
261
+ ],
262
+ 'center' => [
263
+ 'title'=> esc_html__( 'Center', 'elementor' ),
264
+ 'icon' => 'fa fa-align-center',
265
+ ],
266
+ 'right' => [
267
+ 'title'=> esc_html__( 'Right', 'elementor' ),
268
+ 'icon' => 'fa fa-align-right',
269
+ ],
270
+ ],
271
+ 'default' => 'center',
272
+ 'selectors' => [
273
+ '{{WRAPPER}} .premium-fancy-text-wrapper' => 'text-align: {{VALUE}};',
274
+ ],
275
+ ]
276
+ );
277
+
278
+ $this->end_controls_section();
279
+
280
+ /*Start Fancy Text Settings Tab*/
281
+ $this->start_controls_section('premium_fancy_text_style_tab',
282
+ [
283
+ 'label' => esc_html__('Fancy Text Settings', 'premium_elementor'),
284
+ 'tab' => Controls_Manager::TAB_STYLE,
285
+ ]
286
+ );
287
+
288
+ /*Fancy Text Color*/
289
+ $this->add_control('premium_fancy_text_color',
290
+ [
291
+ 'label' => esc_html__('Fancy Text Color', 'premium_elementor'),
292
+ 'type' => Controls_Manager::COLOR,
293
+ 'default' => '#6ec1e4',
294
+ 'selectors' => [
295
+ '{{WRAPPER}} .premium-fancy-text' => 'color: {{VALUE}};',
296
+ ]
297
+ ]
298
+ );
299
+
300
+ /*Fancy Text Typography*/
301
+ $this->add_group_control(
302
+ Group_Control_Typography::get_type(),
303
+ [
304
+ 'name' => 'fancy_text_typography',
305
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
306
+ 'selector' => '{{WRAPPER}} .premium-fancy-text',
307
+ ]
308
+ );
309
+
310
+ /*Fancy Text Background Color*/
311
+ $this->add_control('premium_fancy_text_background_color',
312
+ [
313
+ 'label' => esc_html__('Fancy Text Background Color', 'premium_elementor'),
314
+ 'type' => Controls_Manager::COLOR,
315
+ 'selectors' => [
316
+ '{{WRAPPER}} .premium-fancy-text' => 'background-color: {{VALUE}};',
317
+ ]
318
+ ]
319
+ );
320
+
321
+ /*End Fancy Text Settings Tab*/
322
+ $this->end_controls_section();
323
+
324
+ /*Start Prefix Suffix Text Settings Tab*/
325
+ $this->start_controls_section('premium_prefix_suffix_style_tab',
326
+ [
327
+ 'label' => esc_html__('Prefix Suffix Text Settings', 'premium_elementor'),
328
+ 'tab' => Controls_Manager::TAB_STYLE,
329
+ ]
330
+ );
331
+
332
+ /*Prefix Suffix Text Color*/
333
+ $this->add_control('premium_prefix_suffix_text_color',
334
+ [
335
+ 'label' => esc_html__('Suffix & Prefix Color', 'premium_elementor'),
336
+ 'type' => Controls_Manager::COLOR,
337
+ 'default' => '#54595f',
338
+ 'selectors' => [
339
+ '{{WRAPPER}} .premium-prefix-text, {{WRAPPER}} .premium-suffix-text' => 'color: {{VALUE}};',
340
+ ]
341
+ ]
342
+ );
343
+
344
+ /*Prefix Suffix Typography*/
345
+ $this->add_group_control(
346
+ Group_Control_Typography::get_type(),
347
+ [
348
+ 'name' => 'prefix_suffix_typography',
349
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
350
+ 'selector' => '{{WRAPPER}} .premium-prefix-text, {{WRAPPER}} .premium-suffix-text',
351
+ ]
352
+ );
353
+
354
+ /*Prefix Suffix Text Background Color*/
355
+ $this->add_control('premium_prefix_suffix_text_background_color',
356
+ [
357
+ 'label' => esc_html__('Suffix & Prefix Background Color', 'premium_elementor'),
358
+ 'type' => Controls_Manager::COLOR,
359
+ 'selectors' => [
360
+ '{{WRAPPER}} .premium-prefix-text, {{WRAPPER}} .premium-suffix-text' => 'background-color: {{VALUE}};',
361
+ ]
362
+ ]
363
+ );
364
+
365
+ /*End Prefix Suffix Text Settings Tab*/
366
+ $this->end_controls_section();
367
+ }
368
+
369
+ protected function render( ) {
370
+ // get our input from the widget settings.
371
+ $settings = $this->get_settings();
372
+ ?>
373
+
374
+
375
+ <div class="premium-fancy-text-wrapper">
376
+ <span class="premium-prefix-text" style="<?php if ( $settings['premium_fancy_text_effect'] === 'slide' ) : echo "vertical-align:top;"; endif; ?>"><?php echo wp_kses( ( $settings['premium_fancy_prefix_text'] ), true ); ?></span>
377
+
378
+ <?php if ( $settings['premium_fancy_text_effect'] === 'typing' ) : ?><span id="premium_fancy_text_<?php echo esc_attr( $this->get_id() ); ?>" class="premium-fancy-text" ></span>
379
+ <?php else : ?>
380
+ <div id="premium_fancy_text_<?php echo esc_attr( $this->get_id() ); ?>" class="premium-fancy-text" style=' display: inline-block; text-align: center;'>
381
+ <ul>
382
+ <?php foreach ( $settings['premium_fancy_text_strings'] as $item ) : ?><?php if ( ! empty( $item['premium_text_strings_text_field'] ) ) : ?><?php echo "<li>".esc_attr( $item['premium_text_strings_text_field'] )."</li>"; ?><?php endif; ?><?php endforeach; ?>
383
+ </ul>
384
+ </div>
385
+ <?php endif; ?>
386
+ <span class="premium-suffix-text" style="<?php if ( $settings['premium_fancy_text_effect'] === 'slide' ) : echo "vertical-align: top;"; endif; ?>"><?php echo wp_kses( ( $settings['premium_fancy_suffix_text'] ), true ); ?></span>
387
+ </div>
388
+
389
+ <!-- Typing Effect-->
390
+ <?php if ( $settings['premium_fancy_text_effect'] === 'typing' ) : ?>
391
+ <script type="text/javascript">
392
+ jQuery(document).ready(function( $ ) {
393
+ $( "#premium_fancy_text_<?php echo esc_attr( $this->get_id() );?> " ).typed( {
394
+ strings: [ <?php foreach ( $settings['premium_fancy_text_strings'] as $item ) : ?><?php if ( ! empty( $item['premium_text_strings_text_field'] ) ) : ?>"<?php echo esc_attr($item['premium_text_strings_text_field'] ); ?>",<?php endif; ?><?php endforeach; ?> ],
395
+ typeSpeed: <?php echo esc_attr( $settings['premium_fancy_text_type_speed'] ); ?>,
396
+ backSpeed: <?php echo esc_attr( $settings['premium_fancy_text_back_speed'] ); ?>,
397
+ startDelay: <?php echo esc_attr( $settings['premium_fancy_text_start_delay'] ); ?>,
398
+ backDelay: <?php echo esc_attr( $settings['premium_fancy_text_back_delay'] ); ?>,
399
+ showCursor: <?php if( !empty( $settings['premium_fancy_text_show_cursor'] ) ) : ?> true <?php else : ?>false<?php endif; ?>,
400
+ cursorChar: <?php echo '"' . $settings['premium_fancy_text_cursor_text'] . '"' ; ?>,
401
+ loop: <?php if( !empty( $settings['premium_fancy_text_type_loop'] ) ) : ?>true<?php else : ?>false<?php endif; ?>,
402
+ });
403
+ });
404
+ </script>
405
+ <?php endif; ?>
406
+ <!-- Slide up Effect -->
407
+ <?php if ( $settings['premium_fancy_text_effect'] === 'slide') : ?>
408
+ <script>
409
+ jQuery(function( $ ) {
410
+ $( "#premium_fancy_text_<?php echo esc_attr( $this->get_id() ); ?>").vTicker( {
411
+ speed: <?php echo esc_attr( $settings['premium_slide_up_speed'] ); ?>,
412
+ showItems: <?php echo esc_attr( $settings['premium_slide_up_shown_items'] ); ?>,
413
+ pause: <?php echo esc_attr( $settings['premium_slide_up_pause_time'] ); ?>,
414
+ mousePause : <?php if ( !empty( $settings['premium_slide_up_hover_pause'] ) ) : ?>true<?php else : ?>false<?php endif; ?>,
415
+ direction: "up"
416
+ });
417
+ });
418
+ </script>
419
+ <?php endif; ?>
420
+
421
+ <?php
422
+ }
423
+ }
424
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Fancy_Text_Widget());
widgets/premium-imageseparator.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Image_Separator_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-image-separator';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Image Separator', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-image';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium image separator
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ /* Start Content Section */
35
+ $this->start_controls_section('premium_image_separator_general_settings',
36
+ [
37
+ 'label' => esc_html__('General Settings', 'premium_elementor')
38
+ ]
39
+ );
40
+
41
+ /*Separator Image*/
42
+ $this->add_control('premium_image_separator_image',
43
+ [
44
+ 'label' => esc_html__('Image', 'premium_elementor'),
45
+ 'type' => Controls_Manager::MEDIA,
46
+ 'default' => [
47
+ 'url' => Utils::get_placeholder_image_src(),
48
+ ],
49
+ 'description' => esc_html__('Choose the separator image', 'premium_elementor' ),
50
+ 'label_block' => true
51
+ ]
52
+ );
53
+
54
+ /*Separator Image Size*/
55
+ $this->add_control('premium_image_separator_image_size',
56
+ [
57
+ 'label' => esc_html__('Image Size', 'premium_elementor'),
58
+ 'type' => Controls_Manager::SLIDER,
59
+ 'size_units' => ['px', '%', "em"],
60
+ 'selectors' => [
61
+ '{{WRAPPER}} .premium-image-separator-container img' => 'width: {{SIZE}}{{UNIT}};'
62
+ ]
63
+ ]
64
+ );
65
+
66
+ /*Separator Image Gutter*/
67
+ $this->add_control('premium_image_separator_image_gutter',
68
+ [
69
+ 'label' => esc_html__('Image Gutter (%)', 'premium_elementor'),
70
+ 'type' => Controls_Manager::NUMBER,
71
+ 'default' => -50,
72
+ 'description' => esc_html__('-50% is default. Increase to push the image outside or decrease to pull the image inside.','premium_elementor'),
73
+ 'label_block' => true,
74
+ 'selectors' => [
75
+ '{{WRAPPER}} .premium-image-separator-container' => 'transform: translateY( {{VALUE}}% );'
76
+
77
+ ]
78
+ ]
79
+ );
80
+
81
+ /*Link Below Image*/
82
+ $this->add_control('premium_image_separator_image_link_text',
83
+ [
84
+ 'label' => esc_html__('URL Title', 'premium_elementor'),
85
+ 'type' => Controls_Manager::TEXT,
86
+ 'label_block' => true
87
+ ]
88
+ );
89
+
90
+ /*Link Below Image*/
91
+ $this->add_control('premium_image_separator_image_link',
92
+ [
93
+ 'label' => esc_html__('URL', 'premium_elementor'),
94
+ 'type' => Controls_Manager::TEXT,
95
+ 'label_block' => true
96
+ ]
97
+ );
98
+
99
+ /*Link Target*/
100
+ $this->add_control('premium_image_separator_link_target',
101
+ [
102
+ 'label' => esc_html__('Link Target', 'premium_elementor'),
103
+ 'type' => Controls_Manager::SELECT,
104
+ 'description' => esc_html__( 'Select link target', 'premium_elementor' ),
105
+ 'options' => [
106
+ 'blank' => esc_html('Blank'),
107
+ 'parent' => esc_html('Parent'),
108
+ 'self' => esc_html('Self'),
109
+ 'top' => esc_html('Top'),
110
+ ],
111
+ 'default' => esc_html__('blank','premium_elementor')
112
+ ]
113
+ );
114
+
115
+ /*End Price Settings Section*/
116
+ $this->end_controls_section();
117
+
118
+ }
119
+
120
+ protected function render($instance = [])
121
+ {
122
+ // get our input from the widget settings.
123
+ $settings = $this->get_settings();
124
+ ?>
125
+
126
+ <div class="premium-image-separator-container">
127
+
128
+ <img alt="image separator" class="img-responsive" src="<?php echo $settings['premium_image_separator_image']['url']; ?>">
129
+ <?php if ( !empty ( $settings['premium_image_separator_image_link_text'] ) ) : ?>
130
+ <a class="premium-image-separator-link" href="<?php echo $settings['premium_image_separator_image_link']; ?>" target="_<?php echo $settings['premium_image_separator_link_target']; ?>" title="<?php echo $settings['premium_image_separator_image_link_text']; ?>">
131
+ </a>
132
+ <?php endif;?>
133
+ </div>
134
+ <?php
135
+ }
136
+ }
137
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Image_Separator_Widget());
widgets/premium-maps.php ADDED
@@ -0,0 +1,350 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Maps_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-maps';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Maps', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-post';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium maps
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ /* Start Map Settings Section */
35
+ $this->start_controls_section('premium_maps_map_settings',
36
+ [
37
+ 'label' => esc_html__('Map Settings', 'premium_elementor')
38
+ ]
39
+ );
40
+
41
+ /*Map Pins*/
42
+ $this->add_control('premium_maps_map_pins',
43
+ [
44
+ 'label' => esc_html__('Map Pins', 'premium_elementor'),
45
+ 'type' => Controls_Manager::REPEATER,
46
+ 'default' => [
47
+ 'map_address' => esc_html__('London Eye, London, United Kingdom', 'premium_elementor'),
48
+ 'map_title' => esc_html__('Google Map', 'premium_elementor'),
49
+ 'map_content' => esc_html__('Add an optional title and description to your map pins', 'premium_elementor'),
50
+ ],
51
+ 'fields' => [
52
+ [
53
+ 'name' => 'map_address',
54
+ 'label' => esc_html__('Map Address', 'premium_elementor'),
55
+ 'type' => Controls_Manager::TEXT,
56
+ 'label_block' => true,
57
+ ],
58
+ [
59
+ 'name' => 'map_title',
60
+ 'label' => esc_html__('Pin Title', 'premium_elementor'),
61
+ 'type' => Controls_Manager::TEXT,
62
+ 'label_block' => true,
63
+ ],
64
+ [
65
+ 'name' => 'map_content',
66
+ 'label' => esc_html__('Pin Text', 'premium_elementor'),
67
+ 'type' => Controls_Manager::TEXTAREA,
68
+ 'label_block' => true,
69
+ ],
70
+ [
71
+ 'name' => 'map_marker_open',
72
+ 'label' => esc_html__('Automatically Open Pin', 'premium_elementor'),
73
+ 'type' => Controls_Manager::SWITCHER,
74
+ 'label_block' => true,
75
+ ],
76
+ [
77
+ 'name' => 'map_address_custom_pin',
78
+ 'label' => esc_html__('Custom Marker Icon', 'premium_elementor'),
79
+ 'type' => Controls_Manager::MEDIA,
80
+ ],
81
+ ],
82
+ 'title_field' => '<i class="fa fa-map-marker"></i> {{{ map_address }}}',
83
+ ]
84
+ );
85
+
86
+ /*End Map Settings Section*/
87
+ $this->end_controls_section();
88
+
89
+ /*Start Map Options Section*/
90
+ $this->start_controls_section('premium_maps_map_options',
91
+ [
92
+ 'label' => esc_html__('Map Options', 'premium_elementor'),
93
+ ]
94
+ );
95
+
96
+ $this->add_responsive_control('premium_maps_map_height',
97
+ [
98
+ 'label' => esc_html__( 'Map Height', 'premium_elementor' ),
99
+ 'type' => Controls_Manager::SLIDER,
100
+ 'default' => [
101
+ 'size' => 500,
102
+ ],
103
+ 'range' => [
104
+ 'px' => [
105
+ 'min' => 80,
106
+ 'max' => 1400,
107
+ ],
108
+ ],
109
+ 'selectors' => [
110
+ '{{WRAPPER}} .premium_maps_map_height' => 'height: {{SIZE}}px;',
111
+ ],
112
+ ]
113
+ );
114
+
115
+
116
+
117
+ $this->add_control('premium_maps_map_zoom',
118
+ [
119
+ 'label' => esc_html__( 'Map Zoom', 'premium_elementor' ),
120
+ 'type' => Controls_Manager::SLIDER,
121
+ 'default' => [
122
+ 'size' => 12,
123
+ ],
124
+ 'range' => [
125
+ 'px' => [
126
+ 'min' => 0,
127
+ 'max' => 22,
128
+ ],
129
+ ],
130
+ ]
131
+ );
132
+
133
+
134
+ $this->add_control('premium_maps_map_option_single_pin',
135
+ [
136
+ 'label' => esc_html__( 'Open One Pin at a Time?', 'premium_elementor' ),
137
+ 'type' => Controls_Manager::SWITCHER,
138
+ ]
139
+ );
140
+
141
+ $this->add_control('premium_maps_map_option_streeview',
142
+ [
143
+ 'label' => esc_html__( 'Street View Controls', 'premium_elementor' ),
144
+ 'type' => Controls_Manager::SWITCHER,
145
+ ]
146
+ );
147
+
148
+
149
+
150
+ $this->add_control('premium_maps_map_option_maptype_control',
151
+ [
152
+ 'label' => esc_html__( 'Map Type Controls Top Right', 'premium_elementor' ),
153
+ 'type' => Controls_Manager::SWITCHER,
154
+ ]
155
+ );
156
+
157
+ $this->add_control('premium_maps_map_option_mapscroll',
158
+ [
159
+ 'label' => esc_html__( 'Scroll Wheel Zoom', 'premium_elementor' ),
160
+ 'type' => Controls_Manager::SWITCHER,
161
+ ]
162
+ );
163
+
164
+ $this->add_control('premium_maps_map_type',
165
+ [
166
+ 'label' => esc_html__( 'Map Type', 'premium_elementor' ),
167
+ 'type' => Controls_Manager::SELECT,
168
+ 'options' => [
169
+ 'roodmap' => esc_html__( 'Road Map', 'premium_elementor' ),
170
+ 'satellite' => esc_html__( 'Satellite', 'premium_elementor' ),
171
+ 'terrain' => esc_html__( 'Terrain', 'premium_elementor' ),
172
+ 'hybrid' => esc_html__( 'Hybrid', 'premium_elementor' ),
173
+ ],
174
+ 'default' => 'roodmap',
175
+ ]
176
+ );
177
+
178
+ /*End Map Options Section*/
179
+ $this->end_controls_section();
180
+
181
+ /*Start Title Style Section*/
182
+ $this->start_controls_section('premium_maps_pin_title_style',
183
+ [
184
+ 'label' => esc_html__('Pin Title Style', 'premium_elementor'),
185
+ 'tab' => Controls_Manager::TAB_STYLE,
186
+ ]
187
+ );
188
+
189
+ /*Pin Title Color*/
190
+ $this->add_control('premium_maps_pin_title_color',
191
+ [
192
+ 'label' => esc_html__('Pin Title Color', 'premium_elementor'),
193
+ 'type' => Controls_Manager::COLOR,
194
+ 'selectors' => [
195
+ '{{WRAPPER}} .premium-maps-pin-title' => 'color: {{VALUE}};',
196
+ ]
197
+ ]
198
+ );
199
+
200
+ $this->add_group_control(
201
+ Group_Control_Typography::get_type(),
202
+ [
203
+ 'name' => 'pin_title_typography',
204
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
205
+ 'selector' => '{{WRAPPER}} .premium-maps-pin-title',
206
+ ]
207
+ );
208
+
209
+ /*Pin Title Padding*/
210
+ $this->add_responsive_control('premium_maps_pin_title_padding',
211
+ [
212
+ 'label' => esc_html__('Padding', 'premium_elementor'),
213
+ 'type' => Controls_Manager::DIMENSIONS,
214
+ 'size_units' => ['px', 'em', '%'],
215
+ 'selectors' => [
216
+ '{{WRAPPER}} .premium-maps-pin-title' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
217
+ ]
218
+ ]
219
+ );
220
+
221
+ /*Pin Title ALign*/
222
+ $this->add_responsive_control('premium_maps_pin_title_align',
223
+ [
224
+ 'label' => esc_html__( 'Text Align', 'elementor' ),
225
+ 'type' => Controls_Manager::CHOOSE,
226
+ 'options' => [
227
+ 'left' => [
228
+ 'title'=> esc_html__( 'Left', 'elementor' ),
229
+ 'icon' => 'fa fa-align-left',
230
+ ],
231
+ 'center' => [
232
+ 'title'=> esc_html__( 'Center', 'elementor' ),
233
+ 'icon' => 'fa fa-align-center',
234
+ ],
235
+ 'right' => [
236
+ 'title'=> esc_html__( 'Right', 'elementor' ),
237
+ 'icon' => 'fa fa-align-right',
238
+ ],
239
+ ],
240
+ 'default' => 'center',
241
+ 'selectors' => [
242
+ '{{WRAPPER}} .premium-maps-pin-title' => 'text-align: {{VALUE}};',
243
+ ],
244
+ ]
245
+ );
246
+
247
+ /*End Title Style Section*/
248
+ $this->end_controls_section();
249
+
250
+ /*Start Pin Style Section*/
251
+ $this->start_controls_section('premium_maps_pin_text_style',
252
+ [
253
+ 'label' => esc_html__('Pin Text Style', 'premium_elementor'),
254
+ 'tab' => Controls_Manager::TAB_STYLE,
255
+ ]
256
+ );
257
+
258
+ $this->add_control('premium_maps_pin_text_color',
259
+ [
260
+ 'label' => esc_html__('Pin Description Color', 'premium_elementor'),
261
+ 'type' => Controls_Manager::COLOR,
262
+ 'selectors' => [
263
+ '{{WRAPPER}} .premium-maps-pin-text' => 'color: {{VALUE}};',
264
+ ]
265
+ ]
266
+ );
267
+
268
+ $this->add_group_control(
269
+ Group_Control_Typography::get_type(),
270
+ [
271
+ 'name' => 'pin_text_typo',
272
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
273
+ 'selector' => '{{WRAPPER}} .premium-maps-pin-text',
274
+ ]
275
+ );
276
+
277
+ $this->add_responsive_control('premium_maps_pin_text_padding',
278
+ [
279
+ 'label' => esc_html__('Padding', 'premium_elementor'),
280
+ 'type' => Controls_Manager::DIMENSIONS,
281
+ 'size_units' => ['px', 'em', '%'],
282
+ 'selectors' => [
283
+ '{{WRAPPER}} .premium-maps-pin-text' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
284
+ ]
285
+ ]
286
+ );
287
+
288
+ /*Pin Title ALign*/
289
+ $this->add_responsive_control('premium_maps_pin_description_align',
290
+ [
291
+ 'label' => esc_html__( 'Text Align', 'elementor' ),
292
+ 'type' => Controls_Manager::CHOOSE,
293
+ 'options' => [
294
+ 'left' => [
295
+ 'title'=> esc_html__( 'Left', 'elementor' ),
296
+ 'icon' => 'fa fa-align-left',
297
+ ],
298
+ 'center' => [
299
+ 'title'=> esc_html__( 'Center', 'elementor' ),
300
+ 'icon' => 'fa fa-align-center',
301
+ ],
302
+ 'right' => [
303
+ 'title'=> esc_html__( 'Right', 'elementor' ),
304
+ 'icon' => 'fa fa-align-right',
305
+ ],
306
+ ],
307
+ 'default' => 'center',
308
+ 'selectors' => [
309
+ '{{WRAPPER}} .premium-maps-pin-text h6' => 'text-align: {{VALUE}};',
310
+ ],
311
+ ]
312
+ );
313
+
314
+ /*End Pin Style Section*/
315
+ $this->end_controls_section();
316
+ }
317
+
318
+ protected function render($instance = [])
319
+ {
320
+ // get our input from the widget settings.
321
+ $settings = $this->get_settings();
322
+ ?>
323
+ <div class="premium-maps-container">
324
+ <div id="premium-maps-map-<?php echo esc_attr($this->get_id()); ?>" class="premium_maps_map_height"></div>
325
+ </div>
326
+ <script type="text/javascript">
327
+ jQuery(document).ready(function($) {
328
+ 'use strict';
329
+ $("#premium-maps-map-<?php echo esc_attr($this->get_id()); ?>").goMap({
330
+ <?php if ( ! empty( $settings['map_center_address'] ) ) : ?>address: '<?php echo esc_attr($settings['map_center_address'] ); ?>',<?php endif; ?>
331
+ markers: [
332
+ <?php foreach ( $settings['premium_maps_map_pins'] as $item ) : ?>{
333
+ address: '<?php echo esc_attr( $item['map_address'] ); ?>">',
334
+ <?php if ( ! empty( $item['map_address_custom_pin'] ) ) : ?>
335
+ icon: '<?php $image = $item['map_address_custom_pin']; $imageurl = wp_get_attachment_image_src($image['id'], 'large'); ?><?php echo esc_attr($imageurl[0]);?>',<?php endif; ?>
336
+ <?php if ( ! empty( $item['map_title'] ) ) : ?>
337
+ html: {content: "<div class='premium-maps-map-pin'><h6 class='premium-maps-pin-title'><?php echo esc_attr($item['map_title'] ); ?></h6><div class='premium-maps-pin-text'><h6><?php echo wp_kses( __($item['map_content'] ), true); ?></h6></div></div>",
338
+ popup:<?php if ( ! empty( $item['map_marker_open'] ) ) : ?>true<?php else: ?>false<?php endif; ?>}<?php endif; ?>},
339
+ <?php endforeach; ?>
340
+ ],
341
+ scrollwheel: <?php if ( ! empty( $settings['premium_maps_map_option_mapscroll'] ) ) : ?>true<?php else: ?>false<?php endif; ?>, disableDoubleClickZoom: false, zoom: <?php $width = $this->get_settings( 'premium_maps_map_zoom' ); echo esc_attr($width['size']); ?>, maptype: '<?php echo esc_attr($settings['premium_maps_map_type'] ); ?>', streetViewControl:<?php if ( ! empty( $settings['premium_maps_map_option_streeview'] ) ) : ?>true<?php else: ?>false<?php endif; ?>, oneInfoWindow: <?php if ( ! empty( $settings['premium_maps_map_option_single_pin'] ) ) : ?>true<?php else: ?>false<?php endif; ?>, mapTypeControl:<?php if ( ! empty( $settings['premium_maps_map_option_maptype_control'] ) ) : ?>true<?php else: ?>false<?php endif; ?>
342
+ });
343
+ });
344
+ </script>
345
+
346
+
347
+ <?php
348
+ }
349
+ }
350
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Maps_Widget());
widgets/premium-modalbox.php ADDED
@@ -0,0 +1,702 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Modal_Box_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-modal-box';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Modal Box', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-spin';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+
31
+ // Adding the controls fields for the premium modal box
32
+ // This will controls the animation, colors and background, dimensions etc
33
+ protected function _register_controls() {
34
+
35
+ /* Start Box Content Section */
36
+
37
+ $this->start_controls_section('premium_modal_box_selector_content_section',
38
+ [
39
+ 'label' => esc_html__('Selector Content', 'premium_elementor'),
40
+ ]
41
+ );
42
+
43
+ /*Modal Box Display On*/
44
+ $this->add_control('premium_modal_box_display_on',
45
+ [
46
+ 'label' => esc_html__('Display Modal On', 'premium_elementor'),
47
+ 'type' => Controls_Manager::SELECT,
48
+ 'options' => [
49
+ 'button' => esc_html('Button','premium-elementor'),
50
+ 'image' => esc_html('Image','premium-elementor'),
51
+ 'text' => esc_html('Text','premium-elementor'),
52
+ 'pageload'=> esc_html('On Page Load','premium-elementor'),
53
+ ],
54
+ 'label_block' => true,
55
+ 'default' => 'button',
56
+ ]
57
+ );
58
+
59
+ /*Button Size*/
60
+ $this->add_control('premium_modal_box_button_size',
61
+ [
62
+ 'label' => esc_html__('Button Size', 'premium_elementor'),
63
+ 'type' => Controls_Manager::SELECT,
64
+ 'options' => [
65
+ 'sm' => esc_html('Small','premium-elementor'),
66
+ 'md' => esc_html('Medium','premium-elementor'),
67
+ 'lg' => esc_html('Large','premium-elementor'),
68
+ 'block' => esc_html('Block','premium-elementor'),
69
+ ],
70
+ 'label_block' => true,
71
+ 'default' => 'sm',
72
+ 'condition' => [
73
+ 'premium_modal_box_display_on' => 'button'
74
+ ],
75
+ ]
76
+ );
77
+
78
+ /*Button Text*/
79
+ $this->add_control('premium_modal_box_button_text',
80
+ [
81
+ 'label' => esc_html__('Button Text', 'premium_elementor'),
82
+ 'default' => 'Open Modal',
83
+ 'type' => Controls_Manager::TEXT,
84
+ 'label_block' => true,
85
+ 'condition' => [
86
+ 'premium_modal_box_display_on' => 'button'
87
+ ],
88
+ ]
89
+ );
90
+
91
+ /*Image Source*/
92
+ $this->add_control('premium_modal_box_image_src',
93
+ [
94
+ 'label' => esc_html__('Choose Image', 'premium_elementor'),
95
+ 'type' => Controls_Manager::MEDIA,
96
+ 'default' => [
97
+ 'url' => Utils::get_placeholder_image_src(),
98
+ ],
99
+ 'condition' => [
100
+ 'premium_modal_box_display_on' => 'image',
101
+ ],
102
+ 'label_block' => true,
103
+ ]
104
+ );
105
+
106
+ /*Text Selector*/
107
+ $this->add_control('premium_modal_box_selector_text',
108
+ [
109
+ 'label' => esc_html__('Enter Text', 'premium_elementor'),
110
+ 'type' => Controls_Manager::TEXT,
111
+ 'label_block' => true,
112
+ 'default' => esc_html__('Open Modal', 'premium_elementor'),
113
+ 'condition' => [
114
+ 'premium_modal_box_display_on' => 'text',
115
+ ]
116
+ ]
117
+ );
118
+
119
+ /*On Load Trigger Delay*/
120
+ $this->add_control('premium_modal_box_popup_delay',
121
+ [
122
+ 'label' => esc_html__('Delay in Popup Display','premium_elementor'),
123
+ 'type' => Controls_Manager::NUMBER,
124
+ 'default' => 1,
125
+ 'label_block' => true,
126
+ 'condition' => [
127
+ 'premium_modal_box_display_on' => 'pageload',
128
+ ]
129
+ ]
130
+ );
131
+
132
+ /*Alignment*/
133
+ $this->add_responsive_control('premium_modal_box_selector_align',
134
+ [
135
+ 'label' => __( 'Selector Alignment', 'premium_elementor' ),
136
+ 'type' => Controls_Manager::CHOOSE,
137
+ 'options' => [
138
+ 'left' => [
139
+ 'title' => __( 'Left', 'premium_elementor' ),
140
+ 'icon' => 'fa fa-align-left',
141
+ ],
142
+ 'center' => [
143
+ 'title' => __( 'Center', 'premium_elementor' ),
144
+ 'icon' => 'fa fa-align-center',
145
+ ],
146
+ 'right' => [
147
+ 'title' => __( 'Right', 'premium_elementor' ),
148
+ 'icon' => 'fa fa-align-right',
149
+ ],
150
+ ],
151
+ 'default' => 'center',
152
+ 'selectors' => [
153
+ '{{WRAPPER}} .premium-modal-box-selector-container' => 'text-align: {{VALUE}};',
154
+ ],
155
+ 'default' => '',
156
+ ]
157
+ );
158
+
159
+
160
+ $this->end_controls_section();
161
+
162
+ $this->start_controls_section('premium_modal_box_content_section',
163
+ [
164
+ 'label' => esc_html__('Box Content', 'premium_elementor'),
165
+ ]
166
+ );
167
+
168
+ /*Icon To Display*/
169
+ $this->add_control('premium_modal_box_icon_selection',
170
+ [
171
+ 'label' => esc_html__('Icon to Display', 'premium_elementor'),
172
+ 'type' => Controls_Manager::SELECT,
173
+ 'options' => [
174
+ 'noicon' => esc_html('No Icon'),
175
+ 'fonticon'=> esc_html('Font Awesome Icon'),
176
+ 'image' => esc_html('Custom Image Icon'),
177
+ ],
178
+ 'default' => 'noicon',
179
+ 'label_block' => true
180
+ ]
181
+ );
182
+
183
+ /*Font Awesome Icon*/
184
+ $this->add_control('premium_modal_box_font_icon',
185
+ [
186
+ 'label' => esc_html__('Font Awesome Icon', 'premium_elementor'),
187
+ 'type' => Controls_Manager::ICON,
188
+ 'condition' => [
189
+ 'premium_modal_box_icon_selection' => 'fonticon',
190
+ ],
191
+ 'label_block' => true,
192
+ ]
193
+ );
194
+
195
+ /*Image Icon*/
196
+ $this->add_control('premium_modal_box_image_icon',
197
+ [
198
+ 'label' => esc_html__('Custom Image Icon', 'premium_elementor'),
199
+ 'type' => Controls_Manager::MEDIA,
200
+ 'default' => [
201
+ 'url' => Utils::get_placeholder_image_src(),
202
+ ],
203
+ 'condition' => [
204
+ 'premium_modal_box_icon_selection' => 'image',
205
+ ],
206
+ 'label_block' => true,
207
+ ]
208
+ );
209
+
210
+ /*Modal Box Title*/
211
+ $this->add_control('premium_modal_box_title',
212
+ [
213
+ 'label' => esc_html__('Modal Box Title', 'premium_elementor'),
214
+ 'default' => 'Modal Box Title',
215
+ 'type' => Controls_Manager::TEXT,
216
+ 'label_block' => true,
217
+ ]
218
+ );
219
+
220
+ /*Modal Box Content*/
221
+ $this->add_control('premium_modal_box_content',
222
+ [
223
+ 'label' => esc_html__('Modal Box Content', 'premium_elementoror'),
224
+ 'type' => Controls_Manager::WYSIWYG,
225
+ 'default' => 'Modal Box Content',
226
+ 'selector' => '{{WRAPPER}} .premium-modal-box-modal-body',
227
+ ]
228
+ );
229
+
230
+ /*Modal Size*/
231
+ $this->add_control('premium_modal_box_modal_size',
232
+ [
233
+ 'label' => esc_html__('Modal Width', 'premium_elementor'),
234
+ 'type' => Controls_Manager::SLIDER,
235
+ 'size_units' => ['px', '%', 'em'],
236
+ 'range' => [
237
+ 'px' => [
238
+ 'min' => 50,
239
+ 'max' => 1000,
240
+ ]
241
+ ],
242
+ 'label_block' => true,
243
+ 'selectors' => [
244
+ '{{WRAPPER}} .premium-modal-box-modal-dialog' => 'width: {{SIZE}}{{UNIT}};',
245
+ ]
246
+ ]
247
+ );
248
+
249
+ /*Content Box Border*/
250
+ $this->add_group_control(
251
+ Group_Control_Border::get_type(),
252
+ [
253
+ 'name' => 'contentborder',
254
+ 'selector' => '{{WRAPPER}} .premium-modal-box-modal-content',
255
+ ]
256
+ );
257
+
258
+ /*Border Radius*/
259
+ $this->add_control('premium_modal_box_border_radius',
260
+ [
261
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
262
+ 'type' => Controls_Manager::SLIDER,
263
+ 'size_units' => ['px', '%', 'em'],
264
+ 'selectors' => [
265
+ '{{WRAPPER}} .premium-modal-box-modal-content' => 'border-radius: {{SIZE}}{{UNIT}};',
266
+ ]
267
+ ]
268
+ );
269
+
270
+ /*Upper Close Button*/
271
+ $this->add_control('premium_modal_box_upper_close',
272
+ [
273
+ 'label' => esc_html__('Upper Close Button', 'premium_elementor'),
274
+ 'type' => Controls_Manager::SWITCHER,
275
+ 'default' => 'yes',
276
+ ]
277
+ );
278
+
279
+ /*Lower Close Button*/
280
+ $this->add_control('premium_modal_box_lower_close',
281
+ [
282
+ 'label' => esc_html__('Lower Close Button', 'premium_elementor'),
283
+ 'type' => Controls_Manager::SWITCHER,
284
+ 'default' => 'yes',
285
+ ]
286
+ );
287
+
288
+ /*End Box Content Section*/
289
+ $this->end_controls_section();
290
+
291
+ /*Start Styling Section*/
292
+
293
+ /*Selector Style*/
294
+ $this->start_controls_section('premium_modal_box_selector_style_section',
295
+ [
296
+ 'label' => esc_html__('Selector Style', 'premium_elementor'),
297
+ 'tab' => Controls_Manager::TAB_STYLE,
298
+ ]
299
+ );
300
+
301
+ $this->start_controls_tabs('premium_modal_box_button_style');
302
+
303
+ /*Button Color*/
304
+ $this->start_controls_tab('premium_modal_box_tab_button_normal',
305
+ [
306
+ 'label' => esc_html__( 'Normal', 'premium_elementor' ),
307
+ 'condition' => [
308
+ 'premium_modal_box_display_on' => 'button',
309
+ ]
310
+ ]
311
+ );
312
+
313
+ /*Button Background Color*/
314
+ $this->add_control('premium_modal_box_button_background',
315
+ [
316
+ 'label' => esc_html__('Background Color', 'premium_elementor'),
317
+ 'type' => Controls_Manager::COLOR,
318
+ 'selectors' => [
319
+ '{{WRAPPER}} .premium-modal-box-selector-container .btn-info' => 'background:{{VALUE}};',
320
+ ],
321
+ 'condition' => [
322
+ 'premium_modal_box_display_on' => 'button',
323
+ ]
324
+ ]
325
+ );
326
+
327
+ /*Button Background Color*/
328
+ $this->add_control('premium_modal_box_button_text_background',
329
+ [
330
+ 'label' => esc_html__('Text Color', 'premium_elementor'),
331
+ 'type' => Controls_Manager::COLOR,
332
+ 'default' => '#fff',
333
+ 'selectors' => [
334
+ '{{WRAPPER}} .premium-modal-box-selector-container .btn-info' => 'color:{{VALUE}};',
335
+ ],
336
+ 'condition' => [
337
+ 'premium_modal_box_display_on' => 'button',
338
+ ]
339
+ ]
340
+ );
341
+
342
+ $this->end_controls_tab();
343
+
344
+ $this->start_controls_tab('premium_modal_box_tab_button_hover',
345
+ [
346
+ 'label' => esc_html__('Hover', 'premium_elementor'),
347
+ 'condition' => [
348
+ 'premium_modal_box_display_on' => 'button',
349
+ ]
350
+ ]
351
+ );
352
+
353
+ /*Button Hover Background Color*/
354
+ $this->add_control('premium_modal_box_button_hover_background',
355
+ [
356
+ 'label' => esc_html__('Background Color', 'premium_elementor'),
357
+ 'type' => Controls_Manager::COLOR,
358
+ 'selectors' => [
359
+ '{{WRAPPER}} .premium-modal-box-selector-container .btn-info:hover' => 'background: {{VALUE}};',
360
+ ],
361
+ ]
362
+ );
363
+
364
+ /*Button Background Color*/
365
+ $this->add_control('premium_modal_box_button_text_hover_background',
366
+ [
367
+ 'label' => esc_html__('Text Color', 'premium_elementor'),
368
+ 'type' => Controls_Manager::COLOR,
369
+ 'selectors' => [
370
+ '{{WRAPPER}} .premium-modal-box-selector-container .btn-info:hover' => 'color: {{VALUE}};',
371
+ ],
372
+ ]
373
+ );
374
+
375
+ $this->end_controls_tab();
376
+
377
+ $this->end_controls_tabs();
378
+
379
+ /*Button Border*/
380
+ $this->add_group_control(
381
+ Group_Control_Border::get_type(),
382
+ [
383
+ 'name' => 'button_border',
384
+ 'selector' => '{{WRAPPER}} .premium-modal-box-button-selector ',
385
+ 'condition' => [
386
+ 'premium_modal_box_display_on' => 'button'
387
+ ]
388
+ ]
389
+ );
390
+
391
+ /*Button Border Radius*/
392
+ $this->add_control('premium_modal_box_button_border_radius',
393
+ [
394
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
395
+ 'type' => Controls_Manager::SLIDER,
396
+ 'size_units' => ['px', '%', 'em'],
397
+ 'selectors' => [
398
+ '{{WRAPPER}} .premium-modal-box-button-selector ' => 'border-radius:{{SIZE}}{{UNIT}};',
399
+ ],
400
+ 'condition' => [
401
+ 'premium_modal_box_display_on' => 'button'
402
+ ]
403
+ ]
404
+ );
405
+
406
+ /*Image Border*/
407
+ $this->add_group_control(
408
+ Group_Control_Border::get_type(),
409
+ [
410
+ 'name' => 'imageborder',
411
+ 'selector' => '{{WRAPPER}} .premium-modal-box-img-selector',
412
+ 'condition' => [
413
+ 'premium_modal_box_display_on' => 'image'
414
+ ]
415
+ ]
416
+ );
417
+
418
+ /*Image Border Radius*/
419
+ $this->add_control('premium_modal_box_image_border_radius',
420
+ [
421
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
422
+ 'type' => Controls_Manager::SLIDER,
423
+ 'size_units' => ['px', '%', 'em'],
424
+ 'selectors' => [
425
+ '{{WRAPPER}} .premium-modal-box-img-selector ' => 'border-radius:{{SIZE}}{{UNIT}};',
426
+ ],
427
+ 'condition' => [
428
+ 'premium_modal_box_display_on' => 'image'
429
+ ]
430
+ ]
431
+ );
432
+
433
+ $this->end_controls_section();
434
+
435
+ /*Modal Box Style*/
436
+ $this->start_controls_section('premium_modal_box_general_settings',
437
+ [
438
+ 'label' => esc_html__('Modal Box Style', 'premium_elementor'),
439
+ 'tab' => Controls_Manager::TAB_STYLE,
440
+ ]
441
+ );
442
+
443
+ /*Modal Margin Top*/
444
+ $this->add_control('premium_modal_box_margin_top',
445
+ [
446
+ 'label' => esc_html__('Margin Top','premium_elementor'),
447
+ 'type' => Controls_Manager::SLIDER,
448
+ 'size_units' => ['px', '%' , 'em'],
449
+ 'selectors' => [
450
+ '{{WRAPPER}} .premium-modal-box-modal-dialog' => 'margin-top: {{SIZE}}{{UNIT}};',
451
+ ]
452
+ ]
453
+ );
454
+
455
+ /*Modal Margin Bottom*/
456
+ $this->add_control('premium_modal_box_margin_bottom',
457
+ [
458
+ 'label' => esc_html__('Margin Bottom', 'premium_elementor'),
459
+ 'type' => Controls_Manager::SLIDER,
460
+ 'size_units' => ['px', '%', 'em'],
461
+ 'selectors' => [
462
+ '{{WRAPPER}} .premium-modal-box-modal-dialog' => 'margin-bottom: {{SIZE}}{{UNIT}};',
463
+ ]
464
+ ]
465
+ );
466
+
467
+ /*Modal Background Color*/
468
+ $this->add_control('premium_modal_box_modal_background',
469
+ [
470
+ 'label' => esc_html__('Modal Box Background Color', 'premium_elementor'),
471
+ 'type' => Controls_Manager::COLOR,
472
+ 'selectors' => [
473
+ '{{WRAPPER}} .premium-modal-box-modal' => 'background:{{VALUE}};',
474
+ ]
475
+ ]
476
+ );
477
+
478
+ /*Header Background Color*/
479
+ $this->add_control('premium_modal_box_header_background',
480
+ [
481
+ 'label' => esc_html__('Header Background Color', 'premium_elementor'),
482
+ 'type' => Controls_Manager::COLOR,
483
+ 'selectors' => [
484
+ '{{WRAPPER}} .premium-modal-box-modal-header' => 'background: {{VALUE}};',
485
+ ]
486
+ ]
487
+ );
488
+
489
+ /*Content Background Color*/
490
+ $this->add_control('premium_modal_box_content_background',
491
+ [
492
+ 'label' => esc_html__('Content Background Color', 'premium_elementor'),
493
+ 'type' => Controls_Manager::COLOR,
494
+ 'selectors' => [
495
+ '{{WRAPPER}} .premium-modal-box-modal-body' => 'background: {{VALUE}};',
496
+ ]
497
+ ]
498
+ );
499
+
500
+ /*Footer Background Color*/
501
+ $this->add_control('premium_modal_box_footer_background',
502
+ [
503
+ 'label' => esc_html__('Footer Background Color', 'premium_elementor'),
504
+ 'type' => Controls_Manager::COLOR,
505
+ 'selectors' => [
506
+ '{{WRAPPER}} .premium-modal-box-modal-footer' => 'background: {{VALUE}};',
507
+ ]
508
+ ]
509
+ );
510
+
511
+ /*End General Settings Section*/
512
+ $this->end_controls_section();
513
+
514
+ /*Start Header Seettings Section*/
515
+ $this->start_controls_section('premium_modal_box_header_settings',
516
+ [
517
+ 'label' => esc_html__('Header Text Settings', 'premium_elementor'),
518
+ 'tab' => Controls_Manager::TAB_STYLE,
519
+ ]
520
+ );
521
+
522
+ /*Header Text Color*/
523
+ $this->add_control('premium_modal_box_header_text_color',
524
+ [
525
+ 'label' => esc_html__('Text Color', 'premium_elementor'),
526
+ 'type' => Controls_Manager::COLOR,
527
+ 'selectors' => [
528
+ '{{WRAPPER}} .premium-modal-box-modal-title' => 'color: {{VALUE}};',
529
+ ]
530
+ ]
531
+ );
532
+
533
+ /*Header Text Typography*/
534
+ $this->add_group_control(
535
+ Group_Control_Typography::get_type(),
536
+ [
537
+ 'name' => 'headertext',
538
+ 'label' => esc_html__('Typography', 'premium_elementor'),
539
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
540
+ 'selector' => '{{WRAPPER}} .premium-modal-box-modal-title',
541
+ ]
542
+ );
543
+
544
+ /*End Header Settings Section*/
545
+ $this->end_controls_section();
546
+
547
+ /*Start Close Button Section*/
548
+ $this->start_controls_section('premium_modal_box_upper_close_button_section',
549
+ [
550
+ 'label' => esc_html__('Upper Close Button Settings', 'premium_elementor'),
551
+ 'tab' => Controls_Manager::TAB_STYLE,
552
+ 'condition' => [
553
+ 'premium_modal_box_upper_close' => 'yes',
554
+ ]
555
+ ]
556
+ );
557
+
558
+ /*Close Button Size*/
559
+ $this->add_control('premium_modal_box_upper_close_button_size',
560
+ [
561
+ 'label' => esc_html__('Button Size', 'premium_elementor'),
562
+ 'type' => Controls_Manager::SLIDER,
563
+ 'size_units' => ['px', '%' ,'em'],
564
+ 'selectors' => [
565
+ '{{WRAPPER}} .premium-modal-box-modal-header button' => 'font-size: {{SIZE}}{{UNIT}};',
566
+ ]
567
+ ]
568
+ );
569
+
570
+ /*Close Button Background Color*/
571
+ $this->add_control('premium_modal_box_upper_close_button_background_color',
572
+ [
573
+ 'label' => esc_html__('Background Color', 'premium_elementor'),
574
+ 'type' => Controls_Manager::COLOR,
575
+ 'selectors' => [
576
+ '{{WRAPPER}} .premium-modal-box-close-button-container' => 'background:{{VALUE}};',
577
+ ]
578
+ ]
579
+ );
580
+
581
+ /*End Upper Close Button Style Section*/
582
+ $this->end_controls_section();
583
+
584
+ /*Start Close Button Section*/
585
+ $this->start_controls_section('premium_modal_box_lower_close_button_section',
586
+ [
587
+ 'label' => esc_html__('Lower Close Button Settings', 'premium_elementor'),
588
+ 'tab' => Controls_Manager::TAB_STYLE,
589
+ 'condition' => [
590
+ 'premium_modal_box_upper_close' => 'yes',
591
+ ]
592
+ ]
593
+ );
594
+
595
+ /*Close Button Size*/
596
+ $this->add_control('premium_modal_box_lower_close_button_width',
597
+ [
598
+ 'label' => esc_html__('Button Width (PX)', 'premium_elementor'),
599
+ 'type' => Controls_Manager::SLIDER,
600
+ 'size_units' => ['px', '%', 'em'],
601
+ 'selectors' => [
602
+ '{{WRAPPER}} .premium-modal-box-modal-lower-close' => 'min-width: {{SIZE}}{{UNIT}};',
603
+ ]
604
+ ]
605
+ );
606
+
607
+ /*Close Button Background Color*/
608
+ $this->add_control('premium_modal_box_lower_close_button_background_color',
609
+ [
610
+ 'label' => esc_html__('Background Color', 'premium_elementor'),
611
+ 'type' => Controls_Manager::COLOR,
612
+ 'selectors' => [
613
+ '{{WRAPPER}} .premium-modal-box-modal-lower-close' => 'background: {{VALUE}};',
614
+ ]
615
+ ]
616
+ );
617
+
618
+ /*Close Button Text Typography*/
619
+ $this->add_group_control(
620
+ Group_Control_Typography::get_type(),
621
+ [
622
+ 'name' => 'lowerclose',
623
+ 'label' => esc_html__('Typography', 'premium_elementor'),
624
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
625
+ 'selector' => '{{WRAPPER}} .premium-modal-box-modal-lower-close',
626
+ ]
627
+ );
628
+
629
+ /*End Lower Close Button Style Section*/
630
+ $this->end_controls_section();
631
+
632
+ }
633
+
634
+ protected function render($instance = [])
635
+ {
636
+ // get our input from the widget settings.
637
+ $settings = $this->get_settings();
638
+ ?>
639
+
640
+ <div class="container premium-modal-box-container">
641
+ <!-- Trigger The Modal Box -->
642
+ <div class="premium-modal-box-selector-container">
643
+ <?php
644
+ if ( $settings['premium_modal_box_display_on'] === 'button' ) : ?>
645
+ <button type="button" class="premium-modal-box-button-selector btn btn-info <?php
646
+ if( $settings['premium_modal_box_button_size'] === 'sm' ) : echo "btn-sm";
647
+ elseif( $settings['premium_modal_box_button_size'] === 'md' ) : echo "btn-md";
648
+ elseif( $settings['premium_modal_box_button_size'] === 'lg' ) : echo "btn-lg";
649
+ elseif( $settings['premium_modal_box_button_size'] === 'block' ) : echo "btn-block"; endif; ?>" data-toggle="modal" data-target="#myModal-<?php echo esc_attr( $this->get_id() ); ?>"><?php echo $settings['premium_modal_box_button_text']; ?></button>
650
+ <?php elseif ( $settings['premium_modal_box_display_on'] === 'image' ) : ?>
651
+ <img class="premium-modal-box-img-selector" data-toggle="modal" data-target="#myModal-<?php echo esc_attr( $this->get_id() ); ?>" src="<?php echo $settings['premium_modal_box_image_src']['url'];?>">
652
+ <?php elseif($settings['premium_modal_box_display_on'] === 'text') : ?>
653
+ <span class="premium-modal-box-text-selector" data-toggle="modal" data-target="#myModal-<?php echo esc_attr( $this->get_id() ); ?>"><?php echo $settings['premium_modal_box_selector_text'];?></span>
654
+ <?php elseif ( $settings['premium_modal_box_display_on'] === 'pageload' ) : ?>
655
+ <script>
656
+ jQuery( document ).ready( function( $ ){
657
+ setTimeout( function(){
658
+ $( "#myModal-<?php echo esc_attr( $this->get_id() ); ?>" ).modal();
659
+ },<?php echo $settings['premium_modal_box_popup_delay'] * 1000; ?>);
660
+ });
661
+ </script>
662
+ <?php endif; ?>
663
+ </div>
664
+
665
+
666
+ <!-- Modal -->
667
+ <div class="modal fade premium-modal-box-modal" id="myModal-<?php echo $this->get_id(); ?>" role="dialog">
668
+ <div class="modal-dialog premium-modal-box-modal-dialog">
669
+
670
+ <!-- Modal content-->
671
+ <div class="modal-content premium-modal-box-modal-content">
672
+ <div class="modal-header premium-modal-box-modal-header">
673
+ <?php if ( $settings['premium_modal_box_upper_close'] === 'yes' ) : ?>
674
+ <div class="premium-modal-box-close-button-container">
675
+ <button type="button" class="close premium-modal-box-modal-close" data-dismiss="modal">&times;</button>
676
+ </div>
677
+ <?php endif; ?>
678
+ <h3 class="modal-title premium-modal-box-modal-title">
679
+ <?php if($settings['premium_modal_box_icon_selection'] === 'fonticon') : ?>
680
+ <i class="fa <?php echo $settings['premium_modal_box_font_icon'];?>"></i>
681
+ <?php elseif( $settings['premium_modal_box_icon_selection'] === 'image' ) : ?>
682
+ <img src="<?php echo $settings['premium_modal_box_image_icon']['url'];?>">
683
+ <?php endif; ?><?php echo $settings['premium_modal_box_title'];?></h3>
684
+ </div>
685
+ <div class="modal-body premium-modal-box-modal-body">
686
+ <?php echo $settings['premium_modal_box_content'];?>
687
+ </div>
688
+ <?php if ( $settings['premium_modal_box_lower_close'] === 'yes' ) : ?>
689
+ <div class="modal-footer premium-modal-box-modal-footer">
690
+ <button type="button" class="btn btn-default premium-modal-box-modal-lower-close" data-dismiss="modal">Close
691
+ </button>
692
+ </div>
693
+ <?php endif; ?>
694
+ </div>
695
+ </div>
696
+ </div>
697
+ </div>
698
+
699
+ <?php
700
+ }
701
+ }
702
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Modal_Box_Widget());
widgets/premium-person.php ADDED
@@ -0,0 +1,477 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Person_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-person';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Person', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-person';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium person
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ /* Start Content Section */
35
+ $this->start_controls_section('premium_person_general_settings',
36
+ [
37
+ 'label' => esc_html__('General Settings', 'premium_elementor')
38
+ ]
39
+ );
40
+
41
+ /*Person Image*/
42
+ $this->add_control('premium_person_image',
43
+ [
44
+ 'label' => esc_html__('Person Photo', 'premium_elementor'),
45
+ 'type' => Controls_Manager::MEDIA,
46
+ 'default' => [
47
+ 'url' => Utils::get_placeholder_image_src()
48
+ ],
49
+ 'label_block' => true
50
+ ]
51
+ );
52
+
53
+ $this->add_control('premium_person_image_width',
54
+ [
55
+ 'label' => esc_html__('Image Width', 'premium_elementor'),
56
+ 'type' => Controls_Manager::SLIDER,
57
+ 'description' => esc_html__('Enter image width in (PX, EM, %), default is 100%', 'premium_elementor'),
58
+ 'size_units' => ['px', '%', 'em'],
59
+ 'range' => [
60
+ 'px' => [
61
+ 'min' => 1,
62
+ 'max' => 800,
63
+ ],
64
+ 'em' => [
65
+ 'min' => 1,
66
+ 'max' => 50,
67
+ ],
68
+ ],
69
+ 'default' => [
70
+ 'unit' => '%',
71
+ 'size' => '100',
72
+ ],
73
+ 'label_block' => true,
74
+ 'selectors' => [
75
+ '{{WRAPPER}} .premium-person-image-container img' => 'width: {{SIZE}}{{UNIT}};',
76
+ ]
77
+ ]
78
+ );
79
+
80
+ $this->add_control('premium_person_image_height',
81
+ [
82
+ 'label' => esc_html__('Image Height', 'premium_elementor'),
83
+ 'type' => Controls_Manager::SLIDER,
84
+ 'description' => esc_html__('Choose image height in (PX, EM, %), default is 100%', 'premium_elementor'),
85
+ 'range' => [
86
+ 'px' => [
87
+ 'min' => 1,
88
+ 'max' => 900,
89
+ ],
90
+ 'em' => [
91
+ 'min' => 1,
92
+ 'max' => 55,
93
+ ],
94
+ ],
95
+ 'size_units' => ['px', "em"],
96
+ 'label_block' => true,
97
+ 'selectors' => [
98
+ '{{WRAPPER}} .premium-person-image-container img' => 'height: {{SIZE}}{{UNIT}};',
99
+ ]
100
+ ]
101
+ );
102
+
103
+ /*Hover Image Effect*/
104
+ $this->add_control('premium_person_hover_image_effect',
105
+ [
106
+ 'label' => esc_html__('Hover Image Effect', 'premium_elementor'),
107
+ 'type' => Controls_Manager::SELECT,
108
+ 'options' => [
109
+ 'zoomin' => esc_html__('Zoom In', 'premium_elementor'),
110
+ 'zoomout'=> esc_html__('Zoom Out', 'premium_elementor'),
111
+ 'scale' => esc_html__('Scale', 'premium_elementor'),
112
+ 'grayscale' => esc_html__('Grayscale', 'premium_elementor'),
113
+ 'blur' => esc_html__('Blur', 'premium_elementor'),
114
+ ],
115
+ 'default' => 'zoomin',
116
+ 'label_block' => true
117
+ ]
118
+ );
119
+
120
+ /*Person Name*/
121
+ $this->add_control('premium_person_name',
122
+ [
123
+ 'label' => esc_html__('Name', 'premium_elementor'),
124
+ 'type' => Controls_Manager::TEXT,
125
+ 'default' => esc_html__('John Frank', 'premium_elementor'),
126
+ 'label_block' => true,
127
+ ]
128
+ );
129
+
130
+ /*Name Tag*/
131
+ $this->add_control('premium_person_name_heading',
132
+ [
133
+ 'label' => esc_html__('Name Tag', 'premium_elementor'),
134
+ 'type' => Controls_Manager::SELECT,
135
+ 'default' => 'h2',
136
+ 'options' => [
137
+ 'h1' => esc_html__('H1'),
138
+ 'h2' => esc_html__('H2'),
139
+ 'h3' => esc_html__('H3'),
140
+ 'h4' => esc_html__('H4'),
141
+ 'h5' => esc_html__('H5'),
142
+ 'h6' => esc_html__('H6')
143
+ ],
144
+ 'label_block' => true,
145
+ ]
146
+ );
147
+
148
+ /*Person Title*/
149
+ $this->add_control('premium_person_title',
150
+ [
151
+ 'label' => esc_html__('Job Title', 'premium_elementor'),
152
+ 'type' => Controls_Manager::TEXT,
153
+ 'default' => esc_html__('Senior Developer', 'premium_elementor'),
154
+ 'label_block' => true,
155
+ ]
156
+ );
157
+
158
+ /*Title Tag*/
159
+ $this->add_control('premium_person_title_heading',
160
+ [
161
+ 'label' => esc_html__('Job Title Tag', 'premium_elementor'),
162
+ 'type' => Controls_Manager::SELECT,
163
+ 'default' => 'h3',
164
+ 'options' => [
165
+ 'h1' => esc_html__('H1'),
166
+ 'h2' => esc_html__('H2'),
167
+ 'h3' => esc_html__('H3'),
168
+ 'h4' => esc_html__('H4'),
169
+ 'h5' => esc_html__('H5'),
170
+ 'h6' => esc_html__('H6')
171
+ ],
172
+ 'label_block' => true,
173
+ ]
174
+ );
175
+
176
+ /*Person Facebook*/
177
+ $this->add_control('premium_person_facebook',
178
+ [
179
+ 'label' => esc_html__('Facebook Link', 'premium_elementor'),
180
+ 'type' => Controls_Manager::TEXT,
181
+ 'default' => '#',
182
+ 'label_block' => true,
183
+ ]
184
+ );
185
+
186
+ /*Person Twitter*/
187
+ $this->add_control('premium_person_twitter',
188
+ [
189
+ 'label' => esc_html__('Twitter Link', 'premium_elementor'),
190
+ 'type' => Controls_Manager::TEXT,
191
+ 'default' => '#',
192
+ 'label_block' => true,
193
+ ]
194
+ );
195
+
196
+ /*Person Linkedin*/
197
+ $this->add_control('premium_person_linkedin',
198
+ [
199
+ 'label' => esc_html__('LinkedIn Link', 'premium_elementor'),
200
+ 'type' => Controls_Manager::TEXT,
201
+ 'default' => '#',
202
+ 'label_block' => true,
203
+ ]
204
+ );
205
+
206
+ /*Person Dribble*/
207
+ $this->add_control('premium_person_dribbble',
208
+ [
209
+ 'label' => esc_html__('Dribbble Link', 'premium_elementor'),
210
+ 'type' => Controls_Manager::TEXT,
211
+ 'label_block' => true,
212
+ ]
213
+ );
214
+
215
+ /*Person Google*/
216
+ $this->add_control('premium_person_google',
217
+ [
218
+ 'label' => esc_html__('Google+ Link', 'premium_elementor'),
219
+ 'type' => Controls_Manager::TEXT,
220
+ 'label_block' => true,
221
+ ]
222
+ );
223
+
224
+ /*Person Google*/
225
+ $this->add_control('premium_person_mail',
226
+ [
227
+ 'label' => esc_html__('Email Address', 'premium_elementor'),
228
+ 'type' => Controls_Manager::TEXT,
229
+ 'label_block' => true,
230
+ ]
231
+ );
232
+
233
+ /*Content*/
234
+ $this->add_control('premium_person_content',
235
+ [
236
+ 'label' => esc_html__('Content', 'premium_elementor'),
237
+ 'type' => Controls_Manager::WYSIWYG,
238
+ ]
239
+ );
240
+
241
+ /*Text Align*/
242
+ $this->add_responsive_control('premium_person_text_align',
243
+ [
244
+ 'label' => esc_html__( 'Text Align', 'elementor' ),
245
+ 'type' => Controls_Manager::CHOOSE,
246
+ 'options' => [
247
+ 'left' => [
248
+ 'title'=> esc_html__( 'Left', 'elementor' ),
249
+ 'icon' => 'fa fa-align-left',
250
+ ],
251
+ 'center' => [
252
+ 'title'=> esc_html__( 'Center', 'elementor' ),
253
+ 'icon' => 'fa fa-align-center',
254
+ ],
255
+ 'right' => [
256
+ 'title'=> esc_html__( 'Right', 'elementor' ),
257
+ 'icon' => 'fa fa-align-right',
258
+ ],
259
+ ],
260
+ 'default' => 'center',
261
+ 'selectors' => [
262
+ '{{WRAPPER}} .premium-person-info' => 'text-align: {{VALUE}};',
263
+ ],
264
+ ]
265
+ );
266
+
267
+ /*End General Settings Section*/
268
+ $this->end_controls_section();
269
+
270
+ /*Start General Style Section*/
271
+ $this->start_controls_section('premium_person_general_style',
272
+ [
273
+ 'label' => esc_html__('General Style', 'premium_elementor'),
274
+ 'tab' => Controls_Manager::TAB_STYLE,
275
+ ]
276
+ );
277
+
278
+ /*Social Color*/
279
+ $this->add_control('premium_person_social_color',
280
+ [
281
+ 'label' => esc_html__('Social Icons Color', 'premium_elementor'),
282
+ 'type' => Controls_Manager::COLOR,
283
+ 'default' => '#7a7a7a',
284
+ 'selectors' => [
285
+ '{{WRAPPER}} .premium-person-social-list .premium-person-list-item i' => 'color: {{VALUE}};',
286
+ ]
287
+ ]
288
+ );
289
+
290
+ /*Social Hover Color*/
291
+ $this->add_control('premium_person_social_hover_color',
292
+ [
293
+ 'label' => esc_html__('Social Hover Color', 'premium_elementor'),
294
+ 'type' => Controls_Manager::COLOR,
295
+ 'default' => '#6ec1e4',
296
+ 'selectors' => [
297
+ '{{WRAPPER}} .premium-person-social-list .premium-person-list-item:hover i' => 'color: {{VALUE}};',
298
+ ]
299
+ ]
300
+ );
301
+
302
+ /*Content Background Color*/
303
+ $this->add_control('premium_person_content_background_color',
304
+ [
305
+ 'label' => esc_html__('Content Background Color', 'premium_elementor'),
306
+ 'type' => Controls_Manager::COLOR,
307
+ 'default' => '#f5f5f5',
308
+ 'selectors' => [
309
+ '{{WRAPPER}} .premium-person-info' => 'background-color: {{VALUE}};',
310
+ ]
311
+ ]
312
+ );
313
+
314
+ /*Border Bottom Width*/
315
+ $this->add_control('premium_person_border_bottom_width',
316
+ [
317
+ 'label' => esc_html__('Border Bottom Width (PX)', 'premium_elementor'),
318
+ 'type' => Controls_Manager::SLIDER,
319
+ 'range' => [
320
+ 'px' => [
321
+ 'min' => 0,
322
+ 'max' => 700,
323
+ ]
324
+ ],
325
+ 'default' => [
326
+ 'size' => 20,
327
+ ],
328
+ 'label_block' => true,
329
+ 'selectors' => [
330
+ '{{WRAPPER}} .premium-person-info' => 'bottom: {{SIZE}}px;',
331
+ ]
332
+ ]
333
+ );
334
+
335
+ /*End General Style Section*/
336
+ $this->end_controls_section();
337
+
338
+ /*Start Name Style Section*/
339
+ $this->start_controls_section('premium_person_name_style',
340
+ [
341
+ 'label' => esc_html__('Name Style', 'premium_elementor'),
342
+ 'tab' => Controls_Manager::TAB_STYLE,
343
+ ]
344
+ );
345
+
346
+
347
+ /*Name Color*/
348
+ $this->add_control('premium_person_name_color',
349
+ [
350
+ 'label' => esc_html__('Name Color', 'premium_elementor'),
351
+ 'type' => Controls_Manager::COLOR,
352
+ 'default' => '#6ec1e4',
353
+ 'selectors' => [
354
+ '{{WRAPPER}} .premium-person-name' => 'color: {{VALUE}};',
355
+ ]
356
+ ]
357
+ );
358
+
359
+ /*Name Typography*/
360
+ $this->add_group_control(
361
+ Group_Control_Typography::get_type(),
362
+ [
363
+ 'name' => 'name_typography',
364
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
365
+ 'selector' => '{{WRAPPER}} .premium-person-name',
366
+ ]
367
+ );
368
+
369
+ /*End Name Style Section*/
370
+ $this->end_controls_section();
371
+
372
+ /*Start Title Style Section*/
373
+ $this->start_controls_section('premium_person_title_style',
374
+ [
375
+ 'label' => esc_html__('Job Title Style', 'premium_elementor'),
376
+ 'tab' => Controls_Manager::TAB_STYLE,
377
+ ]
378
+ );
379
+
380
+ /*Title Color*/
381
+ $this->add_control('premium_person_title_color',
382
+ [
383
+ 'label' => esc_html__('Job Title Color', 'premium_elementor'),
384
+ 'type' => Controls_Manager::COLOR,
385
+ 'default' => '#7a7a7a',
386
+ 'selectors' => [
387
+ '{{WRAPPER}} .premium-person-title' => 'color: {{VALUE}};',
388
+ ]
389
+ ]
390
+ );
391
+
392
+ /*Title Typography*/
393
+ $this->add_group_control(
394
+ Group_Control_Typography::get_type(),
395
+ [
396
+ 'name' => 'title_typography',
397
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
398
+ 'selector' => '{{WRAPPER}} .premium-person-title',
399
+ ]
400
+ );
401
+
402
+ /*End Title Style Section*/
403
+ $this->end_controls_section();
404
+
405
+ /*Start Description Style Section*/
406
+ $this->start_controls_section('premium_person_description_style',
407
+ [
408
+ 'label' => esc_html__('Description Style', 'premium_elementor'),
409
+ 'tab' => Controls_Manager::TAB_STYLE,
410
+ ]
411
+ );
412
+
413
+ /*Title Color*/
414
+ $this->add_control('premium_person_description_color',
415
+ [
416
+ 'label' => esc_html__('Description Text Color', 'premium_elementor'),
417
+ 'type' => Controls_Manager::COLOR,
418
+ 'default' => '#7a7a7a',
419
+ 'selectors' => [
420
+ '{{WRAPPER}} .premium-person-content' => 'color: {{VALUE}};',
421
+ ]
422
+ ]
423
+ );
424
+
425
+ /*Title Typography*/
426
+ $this->add_group_control(
427
+ Group_Control_Typography::get_type(),
428
+ [
429
+ 'name' => 'description_typography',
430
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
431
+ 'selector' => '{{WRAPPER}} .premium-person-content',
432
+ ]
433
+ );
434
+
435
+ /*End Description Style Section*/
436
+ $this->end_controls_section();
437
+
438
+ }
439
+
440
+ protected function render($instance = [])
441
+ {
442
+ // get our input from the widget settings.
443
+ $settings = $this->get_settings();
444
+
445
+ $name_heading = $settings['premium_person_name_heading'];
446
+
447
+ $title_heading = $settings['premium_person_title_heading'];
448
+
449
+ $image_effect = $settings['premium_person_hover_image_effect'];
450
+ ?>
451
+
452
+ <div class="premium-person-container <?php echo 'premium-person-' . $image_effect . '-effect' ?>">
453
+ <div class="premium-person-image-container">
454
+ <img src="<?php echo $settings['premium_person_image']['url']; ?>" alt="<?php echo $settings['premium_person_name']; ?>">
455
+ </div>
456
+ <div class="premium-person-info">
457
+ <div class="premium-person-info-container">
458
+ <?php if( !empty( $settings['premium_person_name'] ) ) : ?><<?php echo $name_heading; ?> class="premium-person-name"><?php echo $settings['premium_person_name']; ?></<?php echo $name_heading; ?>><?php endif; ?>
459
+ <?php if( !empty( $settings['premium_person_title'] ) ) : ?><<?php echo $title_heading; ?> class="premium-person-title"><?php echo $settings['premium_person_title']; ?></<?php echo $title_heading; ?>><?php endif; ?>
460
+ <div class="premium-person-content">
461
+ <?php echo $settings['premium_person_content']; ?>
462
+ </div>
463
+ <ul class="premium-person-social-list">
464
+ <?php if( !empty( $settings['premium_person_facebook'] ) ) : ?><li class="premium-person-list-item premium-person-facebook"><a href="<?php echo $settings['premium_person_facebook']; ?>" target="_blank"><i class="fa fa-facebook"></i></a></li><?php endif; ?>
465
+ <?php if( !empty( $settings['premium_person_twitter'] ) ) : ?><li class="premium-person-list-item premium-person-twitter"><a href="<?php echo $settings['premium_person_twitter']; ?>" target="_blank"><i class="fa fa-twitter"></i></a></li><?php endif; ?>
466
+ <?php if( !empty( $settings['premium_person_linkedin'] ) ) : ?><li class="premium-person-list-item premium-person-linkedin"><a href="<?php echo $settings['premium_person_linkedin']; ?>" target="_blank"><i class="fa fa-linkedin"></i></a></li><?php endif; ?>
467
+ <?php if( !empty( $settings['premium_person_dribbble'] ) ) : ?><li class="premium-person-list-item premium-person-dribbble"><a href="<?php echo $settings['premium_person_dribbble']; ?>" target="_blank"><i class="fa fa-dribbble"></i></a></li><?php endif; ?>
468
+ <?php if( !empty( $settings['premium_person_google'] ) ) : ?><li class="premium-person-list-item premium-person-google"><a href="<?php echo $settings['premium_person_google']; ?>" target="_blank"><i class="fa fa-google-plus"></i></a></li><?php endif; ?>
469
+ <?php if( !empty( $settings['premium_person_mail'] ) ) : ?><li class="premium-person-list-item premium-person-mail"><a href="<?php echo $settings['premium_person_mail']; ?>" target="_blank"><i class="fa fa-envelope"></i></a></li><?php endif; ?>
470
+ </ul>
471
+ </div>
472
+ </div>
473
+ </div>
474
+ <?php
475
+ }
476
+ }
477
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Person_Widget());
widgets/premium-progressbar.php ADDED
@@ -0,0 +1,261 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Progressbar_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-progressbar';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Progress Bar', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-list';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium progress bar
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ /* Start Progress Content Section */
35
+ $this->start_controls_section('premium_progressbar_labels',
36
+ [
37
+ 'label' => esc_html__('General Settings', 'premium_elementor'),
38
+ ]
39
+ );
40
+
41
+ /*Left Label*/
42
+ $this->add_control('premium_progressbar_left_label',
43
+ [
44
+ 'label' => esc_html__('Left Label', 'premium_elementor'),
45
+ 'type' => Controls_Manager::TEXT,
46
+ 'default' => esc_html__('My Skill','premium_elementor'),
47
+ 'label_block' => true,
48
+ ]
49
+ );
50
+
51
+ /*Right Label*/
52
+ $this->add_control('premium_progressbar_right_label',
53
+ [
54
+ 'label' => esc_html__('Right Label', 'premium_elementor'),
55
+ 'type' => Controls_Manager::TEXT,
56
+ 'default' => esc_html__('50%','premium_elementor'),
57
+ 'label_block' => true,
58
+ ]
59
+ );
60
+
61
+ /*Progressbar Width*/
62
+ $this->add_control('premium_progressbar_progress_percentage',
63
+ [
64
+ 'label' => esc_html__('Percentage (%)', 'premium_elementor'),
65
+ 'type' => Controls_Manager::SLIDER,
66
+ 'default' => [
67
+ 'size' => 50,
68
+ 'unit' => '%',
69
+ ],
70
+ 'selectors' => [
71
+ '{{WRAPPER}} .premium-progressbar-progress-bar' => 'width: {{SIZE}}{{UNIT}};',
72
+ ]
73
+ ]
74
+ );
75
+
76
+ /*Progress Bar Style*/
77
+ $this->add_control('premium_progressbar_progress_style',
78
+ [
79
+ 'label' => esc_html__('Progress Bar Style', 'premium_elementor'),
80
+ 'type' => Controls_Manager::SELECT,
81
+ 'default' => 'solid',
82
+ 'options' => [
83
+ 'solid' => esc_html__('Solid', 'premium_elementor'),
84
+ 'stripped' => esc_html__('Stripped', 'premium_elementor'),
85
+ ],
86
+ 'label_block' => true,
87
+ ]
88
+ );
89
+
90
+ /*Progress Bar Animated*/
91
+ $this->add_control('premium_progressbar_progress_animation',
92
+ [
93
+ 'label' => esc_html__('Progress Bar Animation', 'premium_elementor'),
94
+ 'type' => Controls_Manager::SELECT,
95
+ 'default' => 'off',
96
+ 'options' => [
97
+ 'off' => esc_html__('OFF'),
98
+ 'on' => esc_html__('ON'),
99
+ ],
100
+ 'label_block' => true,
101
+ 'separator' => 'after',
102
+ ]
103
+ );
104
+
105
+ /*End Progress General Section*/
106
+ $this->end_controls_section();
107
+
108
+ /*Start Styling Section*/
109
+ /*Start progressbar Settings*/
110
+ $this->start_controls_section('premium_progressbar_progress_bar_settings',
111
+ [
112
+ 'label' => esc_html__('Progress Bar Settings', 'premium_elementor'),
113
+ 'tab' => Controls_Manager::TAB_STYLE,
114
+ ]
115
+ );
116
+
117
+ /*Progressbar Height*/
118
+ $this->add_control('premium_progressbar_progress_bar_height',
119
+ [
120
+ 'label' => esc_html__('Height (PX)', 'premium_elementor'),
121
+ 'type' => Controls_Manager::SLIDER,
122
+ 'label_block' => true,
123
+ 'selectors' => [
124
+ '{{WRAPPER}} .premium-progressbar-progress, {{WRAPPER}} .premium-progressbar-progress-bar' => 'height: {{SIZE}}px;',
125
+ ]
126
+ ]
127
+ );
128
+
129
+ /*Border Radius*/
130
+ $this->add_control('premium_progressbar_progress_bar_radius',
131
+ [
132
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
133
+ 'type' => Controls_Manager::SLIDER,
134
+ 'size_units' => ['px', '%', 'em'],
135
+ 'default' => [
136
+ 'unit' => 'px',
137
+ 'size' => 0,
138
+ ],
139
+ 'range' => [
140
+ 'px' => [
141
+ 'min' => 0,
142
+ 'max' => 60,
143
+ ],
144
+ ],
145
+ 'selectors' => [
146
+ '{{WRAPPER}} .premium-progressbar-progress-bar, {{WRAPPER}} .premium-progressbar-progress' => 'border-radius: {{SIZE}}{{UNIT}};',
147
+ ]
148
+ ]
149
+ );
150
+
151
+ /*Progress Bar Color Type*/
152
+ $this->add_group_control(
153
+ Group_Control_Background::get_type(),
154
+ [
155
+ 'name' => 'premium_progressbar_progress_color',
156
+ 'types' => [ 'classic' , 'gradient' ],
157
+ 'selector' => '{{WRAPPER}} .premium-progressbar-progress-bar',
158
+ ]
159
+ );
160
+
161
+ /*Progress Bar Background Color*/
162
+ $this->add_group_control(
163
+ Group_Control_Background::get_type(),
164
+ [
165
+ 'name' => 'premium_progressbar_background',
166
+ 'types' => [ 'classic' , 'gradient' ],
167
+ 'selector' => '{{WRAPPER}} .premium-progressbar-progress',
168
+ ]
169
+ );
170
+
171
+ /*End Progress Bar Section*/
172
+ $this->end_controls_section();
173
+
174
+ /*Start Labels Settings Section*/
175
+ $this->start_controls_section('premium_progressbar_labels_section',
176
+ [
177
+ 'label' => esc_html__('Labels Settings', 'premium_elementor'),
178
+ 'tab' => Controls_Manager::TAB_STYLE,
179
+ ]
180
+ );
181
+
182
+ /*Left Label Color*/
183
+ $this->add_control('premium_progressbar_left_label_color',
184
+ [
185
+ 'label' => esc_html__('Left Label Color', 'premium_elementor'),
186
+ 'type' => Controls_Manager::COLOR,
187
+ 'selectors' => [
188
+ '{{WRAPPER}} .premium-progressbar-left-label' => 'color: {{VALUE}};',
189
+ ]
190
+ ]
191
+ );
192
+
193
+ /*Right Label Color*/
194
+ $this->add_control('premium_progressbar_right_label_color',
195
+ [
196
+ 'label' => esc_html__('Right Label Color', 'premium_elementor'),
197
+ 'type' => Controls_Manager::COLOR,
198
+ 'selectors' => [
199
+ '{{WRAPPER}} .premium-progressbar-right-label' => 'color: {{VALUE}};',
200
+ ]
201
+ ]
202
+ );
203
+
204
+ /*Left Label Margin*/
205
+ $this->add_control('premium_progressbar_left_label_margin',
206
+ [
207
+ 'label' => esc_html__('Left Label Margin', 'premium_elementor'),
208
+ 'type' => Controls_Manager::DIMENSIONS,
209
+ 'size_units' => [ 'px', 'em', '%' ],
210
+ 'selectors' => [
211
+ '{{WRAPPER}} .premium-progressbar-left-label' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
212
+ ]
213
+ ]
214
+ );
215
+
216
+ /*Right Label Margin*/
217
+ $this->add_control('premium_progressbar_right_label_margin',
218
+ [
219
+ 'label' => esc_html__('Right Label Margin', 'premium_elementor'),
220
+ 'type' => Controls_Manager::DIMENSIONS,
221
+ 'size_units' => [ 'px', 'em', '%' ],
222
+ 'selectors' => [
223
+ '{{WRAPPER}} .premium-progressbar-right-label' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
224
+ ]
225
+ ]
226
+ );
227
+
228
+ /*Right Label Margin*/
229
+ $this->add_group_control(
230
+ Group_Control_Typography::get_type(),
231
+ [
232
+ 'name' => 'labels_typography',
233
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
234
+ 'selector' => '{{WRAPPER}} .premium-progressbar-left-label ,{{WRAPPER}} .premium-progressbar-right-label',
235
+ ]
236
+ );
237
+
238
+ /*End Labels Settings Section*/
239
+ $this->end_controls_section();
240
+ }
241
+
242
+ protected function render($instance = [])
243
+ {
244
+ // get our input from the widget settings.
245
+ $settings = $this->get_settings();
246
+ ?>
247
+
248
+ <div class="premium-progressbar-container">
249
+ <p class="premium-progressbar-left-label"><?php echo $settings['premium_progressbar_left_label'];?></p>
250
+ <p class="premium-progressbar-right-label"><?php echo $settings['premium_progressbar_right_label'];?></p>
251
+ <div class="clearfix"></div>
252
+ <div class="progress premium-progressbar-progress">
253
+ <div class=" premium-progressbar-progress-bar progress-bar <?php if( $settings['premium_progressbar_progress_style'] === 'solid' ){ echo "";} elseif( $settings['premium_progressbar_progress_style'] === 'stripped' ){ echo "progress-bar-striped";}?> <?php if( $settings['premium_progressbar_progress_animation'] === 'on' ){ echo "active";}?>" role="progressbar" aria-valuenow="<?php echo $settings['premium_progressbar_progress_percentage']['size']; ?>" aria-valuemin="0" aria-valuemax="100">
254
+ </div>
255
+ </div>
256
+ </div>
257
+
258
+ <?php
259
+ }
260
+ }
261
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Progressbar_Widget());
widgets/premium-testimonials.php ADDED
@@ -0,0 +1,619 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Testimonials_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-testimonials';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Testimonial', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-chat';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium testimonial
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+ /*Testimonials Content Section */
34
+ $this->start_controls_section('premium_testimonial_person_settings',
35
+ [
36
+ 'label' => esc_html__('Person Content Section', 'premium_elementor'),
37
+ ]
38
+ );
39
+
40
+ /*Person Image*/
41
+ $this->add_control('premium_testimonial_person_image',
42
+ [
43
+ 'label' => esc_html__('Person Image','premium_elementor'),
44
+ 'type' => Controls_Manager::MEDIA,
45
+ 'default' => [
46
+ 'url' => 'https://image.freepik.com/free-icon/male-user-silhouette_318-35708.jpg',
47
+ ],
48
+ 'description' => esc_html__( 'Choose an image for the author.', 'premium_elementor' ),
49
+ 'show_label' => true,
50
+ ]
51
+ );
52
+
53
+ /*Person Image Shape*/
54
+ $this->add_control('premium_testimonial_person_image_shape',
55
+ [
56
+ 'label' => esc_html__('Image style.', 'premium_elementor'),
57
+ 'type' => Controls_Manager::SELECT,
58
+ 'description' => esc_html__( 'Choose image style.', 'premium_elementor' ),
59
+ 'options' => [
60
+ 'square' => esc_html__('Square'),
61
+ 'circle' => esc_html__('Circle'),
62
+ 'rounded' => esc_html__('Rounded'),
63
+ ],
64
+ 'default' => 'circle',
65
+ ]
66
+ );
67
+
68
+ /*Person Name*/
69
+ $this->add_control('premium_testimonial_person_name',
70
+ [
71
+ 'label' => esc_html__('Person Name', 'premium_elementor'),
72
+ 'type' => Controls_Manager::TEXTAREA,
73
+ 'default' => esc_html__('Person Name', 'premium_elementor'),
74
+ 'description' => esc_html__( 'Enter author name.', 'premium_elementor' ),
75
+ 'label_block' => true
76
+ ]
77
+ );
78
+
79
+ /*Front Title Tag*/
80
+ $this->add_control('premium_testimonial_person_name_size',
81
+ [
82
+ 'label' => esc_html__('Name Tag', 'premium_elementor'),
83
+ 'type' => Controls_Manager::SELECT,
84
+ 'description' => esc_html__( 'Select a heading tag for author name.', 'premium_elementor' ),
85
+ 'options' => [
86
+ 'h1' => esc_html('H1'),
87
+ 'h2' => esc_html('H2'),
88
+ 'h3' => esc_html('H3'),
89
+ 'h4' => esc_html('H4'),
90
+ 'h5' => esc_html('H5'),
91
+ 'h6' => esc_html('H6'),
92
+ ],
93
+ 'default' => esc_html__('h3','premium_elementor'),
94
+ 'label_block' => true,
95
+ ]
96
+ );
97
+
98
+ /*End Person Content Section*/
99
+ $this->end_controls_section();
100
+
101
+ /*Start Company Content Section*/
102
+ $this->start_controls_section('premium_testimonial_company_settings',
103
+ [
104
+ 'label' => esc_html__('Company Content Section', 'premium_elementor')
105
+ ]
106
+ );
107
+
108
+ /*Company Name*/
109
+ $this->add_control('premium_testimonial_company_name',
110
+ [
111
+ 'label' => esc_html__('Company Name', 'premium_elementor'),
112
+ 'type' => Controls_Manager::TEXTAREA,
113
+ 'default' => esc_html__('Company Name','premium_elementor'),
114
+ 'description' => esc_html__( 'Enter company name.', 'premium_elementor' ),
115
+ 'label_block' => true,
116
+ ]
117
+ );
118
+
119
+ /*Company Link */
120
+ $this->add_control('premium_testimonial_company_link',
121
+ [
122
+ 'label' => esc_html__('Company Link', 'premium_elementor'),
123
+ 'type' => Controls_Manager::TEXTAREA,
124
+ 'description' => esc_html__( 'Add company URL.', 'premium_elementor' ),
125
+ 'label_block' => true,
126
+ ]
127
+ );
128
+
129
+ /*Link Target*/
130
+ $this->add_control('premium_testimonial_link_target',
131
+ [
132
+ 'label' => esc_html__('Link Target', 'premium_elementor'),
133
+ 'type' => Controls_Manager::SELECT,
134
+ 'description' => esc_html__( 'Select link target', 'premium_elementor' ),
135
+ 'options' => [
136
+ 'blank' => esc_html__('Blank'),
137
+ 'parent' => esc_html__('Parent'),
138
+ 'self' => esc_html__('Self'),
139
+ 'top' => esc_html__('Top'),
140
+ ],
141
+ 'default' => esc_html__('blank','premium_elementor'),
142
+ ]
143
+ );
144
+
145
+ /*End Company Content Section*/
146
+ $this->end_controls_section();
147
+
148
+ /*Start Testimonial Content Section*/
149
+ $this->start_controls_section('premium_testimonial_settings',
150
+ [
151
+ 'label' => esc_html__('Testimonial Text Section', 'premium_elementor'),
152
+ ]
153
+ );
154
+
155
+ /*Testimonial Content*/
156
+ $this->add_control('premium_testimonial_content',
157
+ [
158
+ 'label' => esc_html__('Testimonial Content', 'premium_elementor'),
159
+ 'type' => Controls_Manager::WYSIWYG,
160
+ 'default' => esc_html__('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.','premium-elementor'),
161
+ 'label_block' => true,
162
+ ]
163
+ );
164
+
165
+ /*End Testimonial Content Section*/
166
+ $this->end_controls_section();
167
+
168
+ /*Start General Settings Section*/
169
+ $this->start_controls_section('premium_testimonial_box_settings',
170
+ [
171
+ 'label' => esc_html__('General Settings', 'premium_elementor'),
172
+ 'tab' => Controls_Manager::TAB_STYLE,
173
+ ]
174
+ );
175
+
176
+ /*Box Height*/
177
+ $this->add_control('premium_testimonial_box_height',
178
+ [
179
+ 'label' => esc_html__('Box Height', 'premium_elementor'),
180
+ 'type' => Controls_Manager::SLIDER,
181
+ 'size_units' => ['px','em'],
182
+ 'default' => [
183
+ 'size' => 270,
184
+ ],
185
+ 'range' => [
186
+ 'px' => [
187
+ 'min' => 20,
188
+ 'max' => 1000,
189
+ ],
190
+ 'em' => [
191
+ 'min' => 1,
192
+ 'max' => 100,
193
+ ],
194
+ ],
195
+ 'selectors' => [
196
+ '{{WRAPPER}} .premium-testimonial-Box'=> 'min-height: {{SIZE}}{{UNIT}};',
197
+ ]
198
+ ]
199
+ );
200
+
201
+ $this->start_controls_tabs( 'premium_testimonials_box' );
202
+
203
+ $this->start_controls_tab('premium_testimonials_normal',
204
+ [
205
+ 'label' => esc_html__('Normal', 'premium_elementor'),
206
+ ]
207
+ );
208
+
209
+ /*Box Background*/
210
+ $this->add_group_control(
211
+ Group_Control_Background::get_type(),
212
+ [
213
+ 'name' => 'premium_testimonials_back',
214
+ 'types' => [ 'classic', 'gradient' ],
215
+ 'selector' => '{{WRAPPER}} .premium-testimonial-Box',
216
+ ]
217
+ );
218
+
219
+ $this->add_group_control(
220
+ Group_Control_Border::get_type(),
221
+ [
222
+ 'name' => 'premium_testimonials_border',
223
+ 'selector' => '{{WRAPPER}} .premium-testimonial-Box',
224
+ ]
225
+ );
226
+
227
+ $this->add_control('premium_testimonials_border_radius',
228
+ [
229
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
230
+ 'type' => Controls_Manager::SLIDER,
231
+ 'size_units' => ['px', '%' ,'em'],
232
+ 'selectors' => [
233
+ '{{WRAPPER}} .premium-testimonial-Box' => 'border-radius: {{SIZE}}{{UNIT}};'
234
+ ]
235
+ ]
236
+ );
237
+
238
+ $this->add_group_control(
239
+ Group_Control_Box_Shadow::get_type(),
240
+ [
241
+ 'name' => 'premium_testimonials_shadow',
242
+ 'selector' => '{{WRAPPER}} .premium-testimonial-Box',
243
+ ]
244
+ );
245
+
246
+ $this->end_controls_tab();
247
+
248
+ $this->start_controls_tab('premium_testimonials_hover',
249
+ [
250
+ 'label' => esc_html__('Hover', 'premium_elementor'),
251
+ ]
252
+ );
253
+
254
+ /*Box Background*/
255
+ $this->add_group_control(
256
+ Group_Control_Background::get_type(),
257
+ [
258
+ 'name' => 'premium_testimonials_back_hover',
259
+ 'types' => [ 'classic', 'gradient' ],
260
+ 'selector' => '{{WRAPPER}} .premium-testimonial-Box:hover',
261
+ ]
262
+ );
263
+
264
+ $this->add_group_control(
265
+ Group_Control_Border::get_type(),
266
+ [
267
+ 'name' => 'premium_testimonials_border_hover',
268
+ 'selector' => '{{WRAPPER}} .premium-testimonial-Box:hover',
269
+ ]
270
+ );
271
+
272
+ $this->add_control('premium_testimonials_border_radius_hover',
273
+ [
274
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
275
+ 'type' => Controls_Manager::SLIDER,
276
+ 'size_units' => ['px', '%' ,'em'],
277
+ 'selectors' => [
278
+ '{{WRAPPER}} .premium-testimonial-Box:hover' => 'border-radius: {{SIZE}}{{UNIT}};'
279
+ ]
280
+ ]
281
+ );
282
+
283
+ $this->add_group_control(
284
+ Group_Control_Box_Shadow::get_type(),
285
+ [
286
+ 'name' => 'premium_testimonials_shadow_hover',
287
+ 'selector' => '{{WRAPPER}} .premium-testimonial-Box:hover',
288
+ ]
289
+ );
290
+
291
+ $this->end_controls_tab();
292
+
293
+ $this->end_controls_tabs();
294
+
295
+ /*End General Settings Section*/
296
+ $this->end_controls_section();
297
+
298
+ /*Image Styling*/
299
+ $this->start_controls_section('premium_testimonial_image_style',
300
+ [
301
+ 'label' => esc_html__('Image settings', 'premium_elementor'),
302
+ 'tab' => Controls_Manager::TAB_STYLE,
303
+ ]
304
+ );
305
+
306
+ /*Image Size*/
307
+ $this->add_control('premium_testimonial_img_size',
308
+ [
309
+ 'label' => esc_html__('Image Size', 'premium_elementor'),
310
+ 'type' => Controls_Manager::SLIDER,
311
+ 'size_units' => ['px', 'em'],
312
+ 'default' => [
313
+ 'unit' => 'px',
314
+ 'size' => 75,
315
+ ],
316
+ 'range' => [
317
+ 'px'=> [
318
+ 'min' => 10,
319
+ 'max' => 150,
320
+ ]
321
+ ],
322
+ 'selectors' => [
323
+ '{{WRAPPER}} .premium-testimonial-img-wrapper'=> 'width: {{SIZE}}{{UNIT}}; height:{{SIZE}}{{UNIT}};',
324
+ ]
325
+ ]
326
+ );
327
+
328
+ /*Image Border Width*/
329
+ $this->add_control('premium_testimonial_img_border_width',
330
+ [
331
+ 'label' => esc_html__('Image Border Width (PX)', 'premium_elementor'),
332
+ 'type' => Controls_Manager::SLIDER,
333
+ 'default' => [
334
+ 'unit' => 'px',
335
+ 'size' => 2,
336
+ ],
337
+ 'range' => [
338
+ 'px'=> [
339
+ 'min' => 0,
340
+ 'max' => 15,
341
+ ]
342
+ ],
343
+ 'selectors' => [
344
+ '{{WRAPPER}} .premium-testimonial-person-image' => 'border-width: {{SIZE}}{{UNIT}};',
345
+ ]
346
+ ]
347
+ );
348
+
349
+ /*Image Border Color*/
350
+ $this->add_control('premium_testimonial_image_border_color',
351
+ [
352
+ 'label' => esc_html__('Image Border Color', 'premium_elementor'),
353
+ 'type' => Controls_Manager::COLOR,
354
+ 'default' => '#6ec1e4',
355
+ 'selectors' => [
356
+ '{{WRAPPER}} .premium-testimonial-img-wrapper' => 'color: {{VALUE}};',
357
+ ]
358
+ ]
359
+ );
360
+
361
+ $this->end_controls_section();
362
+
363
+ /*Start Quotes Style Section*/
364
+ $this->start_controls_section('premium_testimonial_quotes',
365
+ [
366
+ 'label' => esc_html__('Quotes settings', 'premium_elementor'),
367
+ 'tab' => Controls_Manager::TAB_STYLE,
368
+ ]
369
+ );
370
+
371
+ /*Quotes Color*/
372
+ $this->add_control('premium_testimonial_quote_icon_color',
373
+ [
374
+ 'label' => esc_html__('Quotes Color','premium_elementor'),
375
+ 'type' => Controls_Manager::COLOR,
376
+ 'default' => '#6ec1e4',
377
+ 'selectors' => [
378
+ '{{WRAPPER}} .fa' => 'color: {{VALUE}};',
379
+ ]
380
+ ]
381
+ );
382
+
383
+ /*Quotes Size*/
384
+ $this->add_control('premium_testimonial_quotes_size',
385
+ [
386
+ 'label' => esc_html__('Quotes Size', 'premium_elementor'),
387
+ 'type' => Controls_Manager::SLIDER,
388
+ 'size_units' => ['px', '%', 'em'],
389
+ 'default' => [
390
+ 'unit' => 'px',
391
+ 'size' => 120,
392
+ ],
393
+ 'range' => [
394
+ 'px' => [
395
+ 'min' => 5,
396
+ 'max' => 250,
397
+ ]
398
+ ],
399
+ 'selectors' => [
400
+ '{{WRAPPER}} .premium-testimonial-upper-quote, {{WRAPPER}} .premium-testimonial-lower-quote' => 'font-size: {{SIZE}}{{UNIT}};',
401
+ ]
402
+ ]
403
+ );
404
+
405
+ /*Upper Quote Position*/
406
+ $this->add_control('premium_testimonial_upper_quote_position',
407
+ [
408
+ 'label' => esc_html__('Upper Quote Position', 'premium_elementor'),
409
+ 'type' => Controls_Manager::DIMENSIONS,
410
+ 'size_units' => ['px', 'em', '%'],
411
+ 'default' =>[
412
+ 'top' => 50,
413
+ 'left' => 12 ,
414
+ 'unit' => 'px',
415
+ ],
416
+ 'selectors' => [
417
+ '{{WRAPPER}} .premium-testimonial-upper-quote' => 'top: {{TOP}}{{UNIT}}; left:{{LEFT}}{{UNIT}};',
418
+ ]
419
+ ]
420
+ );
421
+
422
+ /*Lower Quote Position*/
423
+ $this->add_control('premium_testimonial_lower_quote_position',
424
+ [
425
+ 'label' => esc_html__('Lower Quote Position', 'premium_elementor'),
426
+ 'type' => Controls_Manager::DIMENSIONS,
427
+ 'size_units' => ['px', 'em', '%'],
428
+ 'default' =>[
429
+ 'bottom' => 3,
430
+ 'right' => 12,
431
+ 'unit' => 'px',
432
+ ],
433
+ 'selectors' => [
434
+ '{{WRAPPER}} .premium-testimonial-lower-quote' => 'right: {{RIGHT}}{{UNIT}}; bottom: {{BOTTOM}}{{UNIT}};',
435
+ ]
436
+ ]
437
+ );
438
+
439
+ /*End Typography Section*/
440
+ $this->end_controls_section();
441
+
442
+ /*Start Content Settings Section*/
443
+ $this->start_controls_section('premium_testimonial_content_style',
444
+ [
445
+ 'label' => esc_html__('Testimonial Content Settings', 'premium_elementor'),
446
+ 'tab' => Controls_Manager::TAB_STYLE,
447
+ ]
448
+ );
449
+
450
+ /*Content Color*/
451
+ $this->add_control('premium_testimonial_content_color',
452
+ [
453
+ 'label' => esc_html__('Testimonial Text Color', 'premium_elementor'),
454
+ 'type' => Controls_Manager::COLOR,
455
+ 'default' => '#7a7a7a',
456
+ 'selectors' => [
457
+ '{{WRAPPER}} .premium-testimonial-text-wrapper' => 'color: {{VALUE}};',
458
+ ]
459
+ ]
460
+ );
461
+
462
+ /*Content Typography*/
463
+ $this->add_group_control(
464
+ Group_Control_Typography::get_type(),
465
+ [
466
+ 'name' => 'content_typography',
467
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
468
+ 'selector' => '{{WRAPPER}} .premium-testimonial-text-wrapper',
469
+ ]
470
+ );
471
+
472
+
473
+ /*Testimonial Text Margin*/
474
+ $this->add_control('premium_testimonial_margin',
475
+ [
476
+ 'label' => esc_html__('Testimonial Text Margin', 'premium_elementor'),
477
+ 'type' => Controls_Manager::DIMENSIONS,
478
+ 'size_units' => ['px', 'em', '%'],
479
+ 'default' =>[
480
+ 'top' => 15,
481
+ 'bottom'=> 15,
482
+ 'left' => 0 ,
483
+ 'right' => 0 ,
484
+ 'unit' => 'px',
485
+ ],
486
+ 'selectors' => [
487
+ '{{WRAPPER}} .premium-testimonial-text-wrapper' => 'margin: {{top}}{{UNIT}} {{right}}{{UNIT}} {{bottom}}{{UNIT}} {{left}}{{UNIT}};',
488
+ ]
489
+ ]
490
+ );
491
+
492
+ /*End Content Settings Section*/
493
+ $this->end_controls_section();
494
+
495
+ /*Start Person Settings Section*/
496
+ $this->start_controls_section('premium_testimonials_person_style',
497
+ [
498
+ 'label' => esc_html__('Person name settings', 'premium_elementor'),
499
+ 'tab' => Controls_Manager::TAB_STYLE,
500
+ ]
501
+ );
502
+
503
+ /*Person Name Color*/
504
+ $this->add_control('premium_testimonial_person_name_color',
505
+ [
506
+ 'label' => esc_html__('Person Name Color', 'premium_elementor'),
507
+ 'type' => Controls_Manager::COLOR,
508
+ 'default' => '#6ec1e4',
509
+ 'selectors' => [
510
+ '{{WRAPPER}} .premium-testimonial-person-name' => 'color: {{VALUE}};',
511
+ ]
512
+ ]
513
+ );
514
+
515
+ /*Separator Color*/
516
+ $this->add_control('premium_testimonial_separator_color',
517
+ [
518
+ 'label' => esc_html__('Separator Color', 'premium_elementor'),
519
+ 'type' => Controls_Manager::COLOR,
520
+ 'default' => '#7a7a7a',
521
+ 'selectors' => [
522
+ '{{WRAPPER}} .premium-testimonial-separator' => 'color: {{VALUE}};',
523
+ ]
524
+ ]
525
+ );
526
+
527
+ /*Authohr Name Typography*/
528
+ $this->add_group_control(
529
+ Group_Control_Typography::get_type(),
530
+ [
531
+ 'name' => 'author_name_typography',
532
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
533
+ 'selector' => '{{WRAPPER}} .premium-testimonial-person-name',
534
+ ]
535
+ );
536
+
537
+ $this->end_controls_section();
538
+
539
+ /*Start Company Settings Section*/
540
+ $this->start_controls_section('premium_testimonial_company_style',
541
+ [
542
+ 'label' => esc_html__('Company name settings', 'premium_elementor'),
543
+ 'tab' => Controls_Manager::TAB_STYLE,
544
+ ]
545
+ );
546
+
547
+ /*Company Name Color*/
548
+ $this->add_control('premium_testimonial_company_name_color',
549
+ [
550
+ 'label' => esc_html__('Company Name Color', 'premium_elementor'),
551
+ 'type' => Controls_Manager::COLOR,
552
+ 'default' => '#7a7a7a',
553
+ 'selectors' => [
554
+ '{{WRAPPER}} .premium-testimonial-company-link' => 'color: {{VALUE}};',
555
+ ]
556
+ ]
557
+ );
558
+
559
+ /*Company Typography*/
560
+ $this->add_group_control(
561
+ Group_Control_Typography::get_type(),
562
+ [
563
+ 'name' => 'company_name_typography',
564
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
565
+ 'selector' => '{{WRAPPER}} .premium-testimonial-company-link',
566
+ ]
567
+ );
568
+
569
+ /*End Color Section*/
570
+ $this->end_controls_section();
571
+
572
+ }
573
+
574
+ protected function render($instance = [])
575
+ {
576
+ // get our input from the widget settings.
577
+ $settings = $this->get_settings();
578
+
579
+ $person_title_tag = $settings['premium_testimonial_person_name_size'];
580
+ ?>
581
+
582
+ <!-- Testimonial Box Wrapper -->
583
+ <div class="premium-testimonial-Box">
584
+ <div class="premium-testimonial-container">
585
+ <i class="fa fa-quote-left premium-testimonial-upper-quote"></i>
586
+ <!-- Testimonial Body Wrapper -->
587
+ <div class="premium-testimonial-content-wrapper">
588
+ <!-- Image Wrapper -->
589
+ <div class="premium-testimonial-img-wrapper" style="border-radius: <?php
590
+ if( $settings['premium_testimonial_person_image_shape'] === 'circle' ) : echo "50%;";
591
+ elseif ( $settings['premium_testimonial_person_image_shape'] === 'square' ) : echo "0;";
592
+ elseif ( $settings['premium_testimonial_person_image_shape'] === 'rounded' ) : echo "15px;";
593
+ endif;?>">
594
+ <img src="<?php echo $settings['premium_testimonial_person_image']['url']; ?>" alt="<?php echo $settings['premium_testimonial_person_name']; ?>" class="premium-testimonial-person-image"
595
+ style="border-radius: <?php
596
+ if ( $settings['premium_testimonial_person_image_shape'] === 'circle' ) : echo "50%;";
597
+ elseif ( $settings['premium_testimonial_person_image_shape'] === 'square' ) : echo "0;";
598
+ elseif ( $settings['premium_testimonial_person_image_shape'] === 'rounded' ) : echo "15px;";
599
+ endif; ?>">
600
+ </div>
601
+
602
+ <!-- Testimonial Text Wrapper -->
603
+ <div class="premium-testimonial-text-wrapper">
604
+ <?php echo $settings['premium_testimonial_content']; ?>
605
+ </div>
606
+
607
+ <!-- Person Name & Separator & Company Name-->
608
+ <span class="premium-testimonial-author-info">
609
+ <<?php echo $person_title_tag; ?> class="premium-testimonial-person-name"><?php echo $settings['premium_testimonial_person_name']; ?> </<?php echo $person_title_tag; ?>><span class="premium-testimonial-separator"> - </span><a class="premium-testimonial-company-link" href="<?php echo $settings['premium_testimonial_company_link']; ?>" target="_<?php echo $settings['premium_testimonial_link_target']; ?>"><span><?php echo $settings['premium_testimonial_company_name']; ?></span></a>
610
+ </span>
611
+ </div>
612
+
613
+ <i class="fa fa-quote-right premium-testimonial-lower-quote"></i>
614
+ </div>
615
+ </div>
616
+ <?php
617
+ }
618
+ }
619
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Testimonials_Widget());
widgets/premium-title.php ADDED
@@ -0,0 +1,494 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Title_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-title';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Title', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-text';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium title
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ /* Start Title General Settings Section */
35
+ $this->start_controls_section('premium_title_content',
36
+ [
37
+ 'label' => esc_html__('General Settings', 'premium_elementor'),
38
+ ]
39
+ );
40
+
41
+ /*Title Text*/
42
+ $this->add_control('premium_title_text',
43
+ [
44
+ 'label' => esc_html__('Title Content', 'premium_elementor'),
45
+ 'type' => Controls_Manager::TEXT,
46
+ 'default' => esc_html__('Premium Title','premium_elementor'),
47
+ 'label_block' => true,
48
+ ]
49
+ );
50
+
51
+ /*Title HTML TAG*/
52
+ $this->add_control('premium_title_tag',
53
+ [
54
+ 'label' => esc_html__('Title HTML Tag', 'premium_elementor'),
55
+ 'type' => Controls_Manager::SELECT,
56
+ 'default' => esc_html__('h2','premium_elementor'),
57
+ 'options' => [
58
+ 'h1' => esc_html__('H1','premium_elementor'),
59
+ 'h2' => esc_html__('H2','premium_elementor'),
60
+ 'h3' => esc_html__('H3','premium_elementor'),
61
+ 'h4' => esc_html__('H4','premium_elementor'),
62
+ 'h5' => esc_html__('H5','premium_elementor'),
63
+ 'h6' => esc_html__('H6','premium_elementor'),
64
+ ],
65
+ ]
66
+ );
67
+
68
+ /*Title Align*/
69
+ $this->add_responsive_control('premium_title_align',
70
+ [
71
+ 'label' => esc_html__( 'Align', 'premium_elementor' ),
72
+ 'type' => Controls_Manager::CHOOSE,
73
+ 'options' => [
74
+ 'left' => [
75
+ 'title'=> esc_html__( 'Left', 'premium_elementor' ),
76
+ 'icon' => 'fa fa-align-left',
77
+ ],
78
+ 'center' => [
79
+ 'title'=> esc_html__( 'Center', 'premium_elementor' ),
80
+ 'icon' => 'fa fa-align-center',
81
+ ],
82
+ 'right' => [
83
+ 'title'=> esc_html__( 'Right', 'premium_elementor' ),
84
+ 'icon' => 'fa fa-align-right',
85
+ ],
86
+ ],
87
+ 'default' => 'left',
88
+ 'selectors' => [
89
+ '{{WRAPPER}} .premium-title-container' => 'text-align: {{VALUE}};',
90
+ ],
91
+ ]
92
+ );
93
+
94
+ /*Icon*/
95
+ $this->add_control('premium_title_icon',
96
+ [
97
+ 'label' => esc_html__('Icon', 'premium_elementor'),
98
+ 'type' => Controls_Manager::ICON,
99
+ 'label_block' => true,
100
+ ]
101
+ );
102
+
103
+ /*Title Style*/
104
+ $this->add_control('premium_title_style',
105
+ [
106
+ 'label' => esc_html__('Title Style', 'premium_elementor'),
107
+ 'type' => Controls_Manager::SELECT,
108
+ 'default' => 'style1',
109
+ 'options' => [
110
+ 'style1' => esc_html('Style1'),
111
+ 'style2' => esc_html('Style2'),
112
+ 'style3' => esc_html('Style3'),
113
+ 'style4' => esc_html('Style4'),
114
+ 'style5' => esc_html('Style5'),
115
+ 'style6' => esc_html('Style6'),
116
+ 'style7' => esc_html('Style7'),
117
+ ],
118
+ 'label_block' => true,
119
+ ]
120
+ );
121
+
122
+ /*Style 1*/
123
+ /*Style 1 Border*/
124
+ $this->add_group_control(
125
+ Group_Control_Border::get_type(),
126
+ [
127
+ 'name' => 'style_two_border',
128
+ 'selector' => '{{WRAPPER}} .premium-title-style1',
129
+ 'condition' => [
130
+ 'premium_title_style' => 'style1',
131
+ ],
132
+ ]
133
+ );
134
+
135
+ /*Style 2*/
136
+ /*Background Color*/
137
+ $this->add_control('premium_title_style2_background_color',
138
+ [
139
+ 'label' => esc_html__('Background Color', 'premium_elementor'),
140
+ 'type' => Controls_Manager::COLOR,
141
+ 'default' => '#e2e2e2',
142
+ 'selectors' => [
143
+ '{{WRAPPER}} .premium-title-style2' => 'background-color: {{VALUE}};',
144
+ ],
145
+ 'condition' => [
146
+ 'premium_title_style' => 'style2',
147
+ ],
148
+ ]
149
+ );
150
+
151
+ /*Style 2*/
152
+ /*Line Color*/
153
+ $this->add_control('premium_title_style2_line_color',
154
+ [
155
+ 'label' => esc_html__('Line Color', 'premium_elementor'),
156
+ 'type' => Controls_Manager::COLOR,
157
+ 'default' => '#6ec1e4',
158
+ 'selectors' => [
159
+ '{{WRAPPER}} .premium-title-container' => 'border-bottom: 2px solid {{VALUE}};',
160
+ ],
161
+ 'condition' => [
162
+ 'premium_title_style' => 'style2',
163
+ ],
164
+ ]
165
+ );
166
+
167
+ /*Style 3*/
168
+ /*Background Color*/
169
+ $this->add_control('premium_title_style3_background_color',
170
+ [
171
+ 'label' => esc_html__('Background Color', 'premium_elementor'),
172
+ 'type' => Controls_Manager::COLOR,
173
+ 'default' => '#e2e2e2',
174
+ 'selectors' => [
175
+ '{{WRAPPER}} .premium-title-style3' => 'background-color: {{VALUE}};',
176
+ ],
177
+ 'condition' => [
178
+ 'premium_title_style' => 'style3',
179
+ ],
180
+ ]
181
+ );
182
+
183
+ /*Style 4*/
184
+ /*Line Color*/
185
+ $this->add_control('premium_title_style4_line_color',
186
+ [
187
+ 'label' => esc_html__('Line Color', 'premium_elementor'),
188
+ 'type' => Controls_Manager::COLOR,
189
+ 'default' => '#6ec1e4',
190
+ 'selectors' => [
191
+ '{{WRAPPER}} .premium-title-container' => 'border-bottom: 2px solid {{VALUE}};',
192
+ ],
193
+ 'condition' => [
194
+ 'premium_title_style' => 'style4',
195
+ ],
196
+ ]
197
+ );
198
+
199
+ /*Style 5*/
200
+ /*Header Line Color*/
201
+ $this->add_control('premium_title_style5_header_line_color',
202
+ [
203
+ 'label' => esc_html__('Header Line Color', 'premium_elementor'),
204
+ 'type' => Controls_Manager::COLOR,
205
+ 'default' => '#6ec1e4',
206
+ 'selectors' => [
207
+ '{{WRAPPER}} .premium-title-style5' => 'border-bottom: 2px solid {{VALUE}};',
208
+ ],
209
+ 'condition' => [
210
+ 'premium_title_style' => 'style5',
211
+ ],
212
+ ]
213
+ );
214
+
215
+ /*Container Line Color*/
216
+ $this->add_control('premium_title_style5_container_line_color',
217
+ [
218
+ 'label' => esc_html__('Container Line Color', 'premium_elementor'),
219
+ 'type' => Controls_Manager::COLOR,
220
+ 'default' => '#6ec1e4',
221
+ 'selectors' => [
222
+ '{{WRAPPER}} .premium-title-container' => 'border-bottom: 2px solid {{VALUE}};',
223
+ ],
224
+ 'condition' => [
225
+ 'premium_title_style' => 'style5',
226
+ ],
227
+ ]
228
+ );
229
+
230
+ /*Style 7*/
231
+ /*Header Line Color*/
232
+ $this->add_control('premium_title_style6_header_line_color',
233
+ [
234
+ 'label' => esc_html__('Header Line Color', 'premium_elementor'),
235
+ 'type' => Controls_Manager::COLOR,
236
+ 'default' => '#6ec1e4',
237
+ 'selectors' => [
238
+ '{{WRAPPER}} .premium-title-style6' => 'border-bottom: 2px solid {{VALUE}};',
239
+ ],
240
+ 'condition' => [
241
+ 'premium_title_style' => 'style6',
242
+ ],
243
+ ]
244
+ );
245
+
246
+ /*Container Line Color*/
247
+ $this->add_control('premium_title_style6_container_line_color',
248
+ [
249
+ 'label' => esc_html__('Container Line Color', 'premium_elementor'),
250
+ 'type' => Controls_Manager::COLOR,
251
+ 'default' => '#6ec1e4',
252
+ 'selectors' => [
253
+ '{{WRAPPER}} .premium-title-container' => 'border-bottom: 2px solid {{VALUE}};',
254
+ ],
255
+ 'condition' => [
256
+ 'premium_title_style' => 'style6',
257
+ ],
258
+ ]
259
+ );
260
+
261
+ /*Triangle Color*/
262
+ $this->add_control('premium_title_style6_triangle_color',
263
+ [
264
+ 'label' => esc_html__('Triangle Color', 'premium_elementor'),
265
+ 'type' => Controls_Manager::COLOR,
266
+ 'default' => '#6ec1e4',
267
+ 'selectors' => [
268
+ '{{WRAPPER}} .premium-title-style6:before' => 'border-bottom-color: {{VALUE}};',
269
+ ],
270
+ 'condition' => [
271
+ 'premium_title_style' => 'style6',
272
+ ],
273
+ ]
274
+ );
275
+
276
+ /*Style 8*/
277
+ /*Strip Width*/
278
+ $this->add_control('premium_title_style7_strip_width',
279
+ [
280
+ 'label' => esc_html__('Strip Width (PX)', 'premium_elementor'),
281
+ 'type' => Controls_Manager::SLIDER,
282
+ 'size_units' => ['px', '%', 'em'],
283
+ 'default' => [
284
+ 'unit' => 'px',
285
+ 'size' => '120',
286
+ ],
287
+ 'selectors' => [
288
+ '{{WRAPPER}} .premium-title-style7-strip:before' => 'width: {{SIZE}}{{UNIT}};',
289
+ ],
290
+ 'label_block' => true,
291
+ 'condition' => [
292
+ 'premium_title_style' => 'style7',
293
+ ],
294
+ ]
295
+ );
296
+
297
+ /*Strip Height*/
298
+ $this->add_control('premium_title_style7_strip_height',
299
+ [
300
+ 'label' => esc_html__('Strip Height (PX)', 'premium_elementor'),
301
+ 'type' => Controls_Manager::SLIDER,
302
+ 'size_units' => ['px', 'em'],
303
+ 'default' => [
304
+ 'unit' => 'px',
305
+ 'size' => '5',
306
+ ],
307
+ 'label_block' => true,
308
+ 'selectors' => [
309
+ '{{WRAPPER}} .premium-title-style7-strip,{{WRAPPER}} .premium-title-style7-strip:before ' => 'height: {{SIZE}}{{UNIT}};',
310
+ ],
311
+ 'condition' => [
312
+ 'premium_title_style' => 'style7',
313
+ ],
314
+ ]
315
+ );
316
+
317
+ /*Strip Top Spacing*/
318
+ $this->add_control('premium_title_style7_strip_top_spacing',
319
+ [
320
+ 'label' => esc_html__('Strip Top Spacing (PX)', 'premium_elementor'),
321
+ 'type' => Controls_Manager::SLIDER,
322
+ 'size_units' => ['px', '%', 'em'],
323
+ 'selectors' => [
324
+ '{{WRAPPER}} .premium-title-style7-strip' => 'margin-top: {{SIZE}}{{UNIT}};',
325
+ ],
326
+ 'label_block' => true,
327
+ 'condition' => [
328
+ 'premium_title_style' => 'style7',
329
+ ],
330
+ ]
331
+ );
332
+
333
+ /*Strip Bottom Spacing*/
334
+ $this->add_control('premium_title_style7_strip_bottom_spacing',
335
+ [
336
+ 'label' => esc_html__('Strip Bottom Spacing (PX)', 'premium_elementor'),
337
+ 'type' => Controls_Manager::SLIDER,
338
+ 'size_units' => ['px', '%', 'em'],
339
+ 'label_block' => true,
340
+ 'selectors' => [
341
+ '{{WRAPPER}} .premium-title-style7-strip' => 'margin-bottom: {{SIZE}}{{UNIT}};',
342
+ ],
343
+ 'condition' => [
344
+ 'premium_title_style' => 'style7',
345
+ ],
346
+ ]
347
+ );
348
+
349
+ /*Strip Color*/
350
+ $this->add_control('premium_title_style7_strip_color',
351
+ [
352
+ 'label' => esc_html__('Strip Color', 'premium_elementor'),
353
+ 'type' => Controls_Manager::COLOR,
354
+ 'default' => '#6ec1e4',
355
+ 'selectors' => [
356
+ '{{WRAPPER}} .premium-title-style7-strip:before' => 'background-color: {{VALUE}};',
357
+ ],
358
+ 'condition' => [
359
+ 'premium_title_style' => 'style7',
360
+ ],
361
+ ]
362
+ );
363
+
364
+ /*Title Align*/
365
+ $this->add_responsive_control('premium_title_style7_strip_align',
366
+ [
367
+ 'label' => esc_html__( 'Align', 'elementor' ),
368
+ 'type' => Controls_Manager::CHOOSE,
369
+ 'options' => [
370
+ 'left' => [
371
+ 'title'=> esc_html__( 'Left', 'elementor' ),
372
+ 'icon' => 'fa fa-align-left',
373
+ ],
374
+ 'none' => [
375
+ 'title'=> esc_html__( 'Center', 'elementor' ),
376
+ 'icon' => 'fa fa-align-center',
377
+ ],
378
+ 'right' => [
379
+ 'title'=> esc_html__( 'Right', 'elementor' ),
380
+ 'icon' => 'fa fa-align-right',
381
+ ],
382
+ ],
383
+ 'default' => 'none',
384
+ 'selectors' => [
385
+ '{{WRAPPER}} .premium-title-style7-strip:before' => 'float: {{VALUE}};',
386
+ ],
387
+ 'condition' => [
388
+ 'premium_title_style' => 'style7',
389
+ ],
390
+ ]
391
+ );
392
+
393
+ /*End Title General Settings Section*/
394
+ $this->end_controls_section();
395
+
396
+ /*Start Styling Section*/
397
+ $this->start_controls_section('premium_title_style_section',
398
+ [
399
+ 'label' => esc_html__('Title Style', 'premium_elementor'),
400
+ 'tab' => Controls_Manager::TAB_STYLE,
401
+ ]
402
+ );
403
+
404
+ /*Title Color*/
405
+ $this->add_control('premium_title_color',
406
+ [
407
+ 'label' => esc_html__('Title Color', 'premium_elementor'),
408
+ 'type' => Controls_Manager::COLOR,
409
+ 'default' => '#6ec1e4',
410
+ 'selectors' => [
411
+ '{{WRAPPER}} .premium-title-header' => 'color: {{VALUE}};',
412
+ ],
413
+ ]
414
+ );
415
+
416
+ /*Title Typography*/
417
+ $this->add_group_control(
418
+ Group_Control_Typography::get_type(),
419
+ [
420
+ 'name' => 'title_typography',
421
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
422
+ 'selector' => '{{WRAPPER}} .premium-title-header',
423
+ ]
424
+ );
425
+
426
+ /*Margin Top*/
427
+ $this->add_control('premium_title_margin_top',
428
+ [
429
+ 'label' => esc_html__('Margin Top', 'premium_elementor'),
430
+ 'type' => Controls_Manager::SLIDER,
431
+ 'size_units' => ['px', '%', 'em'],
432
+ 'label_block' => true,
433
+ 'selectors' => [
434
+ '{{WRAPPER}} .premium-title-header' => 'margin-top: {{SIZE}}{{UNIT}};',
435
+ ]
436
+ ]
437
+ );
438
+
439
+ /*Margin Bottom*/
440
+ $this->add_control('premium_title_margin_bottom',
441
+ [
442
+ 'label' => esc_html__('Margin Bottom', 'premium_elementor'),
443
+ 'type' => Controls_Manager::SLIDER,
444
+ 'size_units' => ['px', '%', 'em'],
445
+ 'label_block' => true,
446
+ 'selectors' => [
447
+ '{{WRAPPER}} .premium-title-header' => 'margin-bottom: {{SIZE}}{{UNIT}};',
448
+ ]
449
+ ]
450
+ );
451
+
452
+ /*Title Padding*/
453
+ $this->add_control('premium_title_padding',
454
+ [
455
+ 'label' => esc_html__('Padding', 'premium_elementor'),
456
+ 'type' => Controls_Manager::DIMENSIONS,
457
+ 'size_units' => ['px', 'em', '%'],
458
+ 'selectors' => [
459
+ '{{WRAPPER}} .premium-title-header' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
460
+ ]
461
+ ]
462
+ );
463
+
464
+ /*End Progress Bar Section*/
465
+ $this->end_controls_section();
466
+
467
+ }
468
+
469
+ protected function render($instance = [])
470
+ {
471
+ // get our input from the widget settings.
472
+ $settings = $this->get_settings();
473
+
474
+ $title_tag = $settings['premium_title_tag'];
475
+
476
+ $selected_style = $settings['premium_title_style'];
477
+ ?>
478
+
479
+ <div class="premium-title-container">
480
+ <<?php echo $title_tag ; ?> class="premium-title-header premium-title-<?php echo $selected_style; ?>">
481
+ <?php if ( $settings['premium_title_style'] === 'style7' ) : ?>
482
+ <span class="premium-title-style7-strip"></span>
483
+ <?php endif; ?>
484
+ <?php if( !empty( $settings['premium_title_icon'] ) ) : ?>
485
+ <i class="premium-title-icon <?php echo $settings['premium_title_icon'];?>"></i>
486
+ <?php endif; ?>
487
+ <?php echo $settings['premium_title_text']; ?>
488
+ </<?php echo $title_tag; ?>>
489
+ </div>
490
+
491
+ <?php
492
+ }
493
+ }
494
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Title_Widget());
widgets/premium-videobox.php ADDED
@@ -0,0 +1,353 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Elementor;
3
+
4
+ if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
+
6
+ class Premium_Video_Box_Widget extends Widget_Base
7
+ {
8
+ protected $templateInstance;
9
+
10
+ public function getTemplateInstance() {
11
+ return $this->templateInstance = premium_Template_Tags::getInstance();
12
+ }
13
+
14
+ public function get_name() {
15
+ return 'premium-addon-video-box';
16
+ }
17
+
18
+ public function get_title() {
19
+ return esc_html__('Premium Video Box', 'premium_elementor');
20
+ }
21
+
22
+ public function get_icon() {
23
+ return 'pa-pa-video';
24
+ }
25
+
26
+ public function get_categories() {
27
+ return [ 'premium-elements' ];
28
+ }
29
+
30
+ // Adding the controls fields for the premium video box
31
+ // This will controls the animation, colors and background, dimensions etc
32
+ protected function _register_controls() {
33
+
34
+ /* Start Image Settings Section */
35
+ $this->start_controls_section('premium_video_box_image_settings',
36
+ [
37
+ 'label' => esc_html__('Image Settings', 'premium_elementor'),
38
+ ]
39
+ );
40
+
41
+ /*Video Box Image*/
42
+ $this->add_control('premium_video_box_image',
43
+ [
44
+ 'label' => esc_html__('Image', 'premium_elementor'),
45
+ 'description' => esc_html__('Choose the video box Image', 'premium_elementor' ),
46
+ 'type' => Controls_Manager::MEDIA,
47
+ 'default' => [
48
+ 'url' => Utils::get_placeholder_image_src()
49
+ ],
50
+ 'label_block' => true,
51
+ ]
52
+ );
53
+
54
+ /*Image Border*/
55
+ $this->add_group_control(
56
+ Group_Control_Border::get_type(),
57
+ [
58
+ 'name' => 'image_border',
59
+ 'selector' => '{{WRAPPER}} .premium-video-box-image, {{WRAPPER}} .premium-video-box-video-container iframe',
60
+ ]
61
+ );
62
+
63
+ /*Image Border Radius*/
64
+ $this->add_control('premium_video_box_image_border_radius',
65
+ [
66
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
67
+ 'type' => Controls_Manager::SLIDER,
68
+ 'size_units' => ['px', '%', 'em'],
69
+ 'selectors' => [
70
+ '{{WRAPPER}} .premium-video-box-image, {{WRAPPER}} .premium-video-box-video-container iframe' => 'border-radius: {{SIZE}}{{UNIT}};',
71
+ ]
72
+ ]
73
+ );
74
+
75
+ /*End Image Settings Section*/
76
+ $this->end_controls_section();
77
+
78
+ /*Start Play Icon Settings*/
79
+ $this->start_controls_section('premium_video_box_play_icon_settings',
80
+ [
81
+ 'label' => esc_html__('Play Icon Settings', 'premium_elementor'),
82
+ ]
83
+ );
84
+
85
+ /*Play Icon Size*/
86
+ $this->add_control('premium_video_box_play_icon_size',
87
+ [
88
+ 'label' => esc_html__('Icon Size', 'premium_elementor'),
89
+ 'type' => Controls_Manager::SLIDER,
90
+ 'size_units' => ['px', '%', 'em'],
91
+ 'selectors' => [
92
+ '{{WRAPPER}} .premium-video-box-play-icon' => 'font-size: {{SIZE}}{{UNIT}};',
93
+ ]
94
+ ]
95
+ );
96
+
97
+ /*Play Icon Color*/
98
+ $this->add_control('premium_video_box_play_icon_color',
99
+ [
100
+ 'label' => esc_html__('Icon Color', 'premium_elementor'),
101
+ 'type' => Controls_Manager::COLOR,
102
+ 'selectors' => [
103
+ '{{WRAPPER}} .premium-video-box-play-icon' => 'color: {{VALUE}};',
104
+ ]
105
+ ]
106
+ );
107
+
108
+ /*Play Icon Background Color*/
109
+ $this->add_group_control(
110
+ Group_Control_Background::get_type(),
111
+ [
112
+ 'name' => 'premium_video_box_play_icon_background_color',
113
+ 'types' => ['classic', 'gradient'],
114
+ 'selector' => '{{WRAPPER}} .premium-video-box-play-icon-container',
115
+ ]
116
+ );
117
+
118
+ /*Play Icon Border*/
119
+ $this->add_group_control(
120
+ Group_Control_Border::get_type(),
121
+ [
122
+ 'name' => 'icon_border',
123
+ 'selector' => '{{WRAPPER}} .premium-video-box-play-icon-container',
124
+ ]
125
+ );
126
+
127
+ /*Play Icon Border Radius*/
128
+ $this->add_control('premium_video_box_icon_border_radius',
129
+ [
130
+ 'label' => esc_html__('Border Radius', 'premium_elementor'),
131
+ 'type' => Controls_Manager::SLIDER,
132
+ 'size_units' => ['px', '%', 'em'],
133
+ 'selectors' => [
134
+ '{{WRAPPER}} .premium-video-box-play-icon-container' => 'border-radius: {{SIZE}}{{UNIT}};',
135
+ ]
136
+ ]
137
+ );
138
+
139
+ /*Enable Icon Hover Size Change*/
140
+ $this->add_control('premium_video_box_icon_hover_animation',
141
+ [
142
+ 'label' => esc_html__('Hover Animation', 'premium_elementor'),
143
+ 'type' => Controls_Manager::SWITCHER,
144
+ 'default' => 'yes',
145
+ ]
146
+ );
147
+
148
+ /*End Play Icon Settings*/
149
+ $this->end_controls_section();
150
+
151
+ /*Start Description Text Section*/
152
+ $this->start_controls_section('premium_video_box_description_text_section',
153
+ [
154
+ 'label' => esc_html__('Video Description Settings', 'premium_elementor'),
155
+ ]
156
+ );
157
+
158
+ /*Description Text*/
159
+ $this->add_control('premium_video_box_description_text',
160
+ [
161
+ 'label' => esc_html__('Description Text', 'premium_elementor'),
162
+ 'type' => Controls_Manager::TEXTAREA,
163
+ 'label_block' => true,
164
+ ]
165
+ );
166
+
167
+ /*Description Top Position*/
168
+ $this->add_control('premium_video_box_description_position',
169
+ [
170
+ 'label' => esc_html__('Description Top Position (%)', 'premium_elementor'),
171
+ 'type' => Controls_Manager::SLIDER,
172
+ 'label_block' => true,
173
+ 'default' => [
174
+ 'size' => 50,
175
+ ],
176
+ 'selectors' => [
177
+ '{{WRAPPER}} .premium-video-box-description-container' => 'top: {{SIZE}}%;',
178
+ ]
179
+ ]
180
+ );
181
+
182
+ /*End Description Text Section*/
183
+ $this->end_controls_section();
184
+
185
+ /*Start Video Settings Section*/
186
+ $this->start_controls_section('premium_video_box_video_settings_section',
187
+ [
188
+ 'label' => esc_html__('Video Settings', 'premium_elementor'),
189
+ ]
190
+ );
191
+
192
+ /*Video Type*/
193
+ $this->add_control('premium_video_box_video_type',
194
+ [
195
+ 'label' => esc_html__('Video Type', 'premium_elementor'),
196
+ 'type' => Controls_Manager::SELECT,
197
+ 'default' => 'youtube',
198
+ 'options' => [
199
+ 'youtube' => esc_html__('Youtube', 'premium_elementor'),
200
+ 'vimeo' => esc_html__('Vimeo', 'premium_elementor'),
201
+ ]
202
+ ]
203
+ );
204
+
205
+ /*Video Id or Link*/
206
+ $this->add_control('premium_video_box_video_id_embed_selection',
207
+ [
208
+ 'label' => esc_html__('Id/Embded URL', 'premium_elementor'),
209
+ 'type' => Controls_Manager::SELECT,
210
+ 'default' => 'id',
211
+ 'options' => [
212
+ 'id' => esc_html__('Id', 'premium_elementor'),
213
+ 'embed' => esc_html__('Embed URL', 'premium_elementor'),
214
+ ]
215
+ ]
216
+ );
217
+
218
+ /*Video Id*/
219
+ $this->add_control('premium_video_box_video_id',
220
+ [
221
+ 'label' => esc_html__('Video Id', 'premium_elementor'),
222
+ 'description' => esc_html__('for example: z1hQgVpfTKU', 'premium_elementor'),
223
+ 'type' => Controls_Manager::TEXT,
224
+ 'condition' => [
225
+ 'premium_video_box_video_id_embed_selection' => 'id',
226
+ ]
227
+ ]
228
+ );
229
+
230
+ /*Video Link*/
231
+ $this->add_control('premium_video_box_video_embed',
232
+ [
233
+ 'label' => esc_html__('Embed Video src', 'premium_elementor'),
234
+ 'description' => esc_html__('for example: https://www.youtube.com/embed/z1hQgVpfTKU', 'premium_elementor'),
235
+ 'type' => Controls_Manager::TEXT,
236
+ 'condition' => [
237
+ 'premium_video_box_video_id_embed_selection' => 'embed',
238
+ ]
239
+ ]
240
+ );
241
+
242
+ /*End Video Settings Section*/
243
+ $this->end_controls_section();
244
+
245
+ /*Start Text Below Icon Style Section*/
246
+ $this->start_controls_section('premium_video_box_text_style_section',
247
+ [
248
+ 'label' => esc_html__('Video Box Style','premium_elementor'),
249
+ 'tab' => Controls_Manager::TAB_STYLE,
250
+ ]
251
+ );
252
+ /*Box Text Shadow*/
253
+ $this->add_group_control(
254
+ Group_Control_Box_Shadow::get_type(),
255
+ [
256
+ 'name' => 'box_shadow',
257
+ 'selector' => '{{WRAPPER}} .premium-video-box-container',
258
+ ]
259
+ );
260
+
261
+ /*Text Color*/
262
+ $this->add_control('premium_video_box_text_color',
263
+ [
264
+ 'label' => esc_html__('Text Color', 'premium_elementor'),
265
+ 'type' => Controls_Manager::COLOR,
266
+ 'selectors' => [
267
+ '{{WRAPPER}} .premium-video-box-text' => 'color: {{VALUE}};',
268
+ ]
269
+ ]
270
+ );
271
+
272
+ /*Text Typography*/
273
+ $this->add_group_control(
274
+ Group_Control_Typography::get_type(),
275
+ [
276
+ 'name' => 'text_typography',
277
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
278
+ 'selector' => '{{WRAPPER}} .premium-video-box-text',
279
+ ]
280
+ );
281
+
282
+ /*End Text Below Icon Style Section*/
283
+ $this->end_controls_section();
284
+
285
+ }
286
+
287
+ protected function render($instance = [])
288
+ {
289
+ // get our input from the widget settings.
290
+ $settings = $this->get_settings();
291
+
292
+ $video_type = $settings['premium_video_box_video_type'];
293
+
294
+ $video_url_type = $settings['premium_video_box_video_id_embed_selection'];
295
+
296
+ $video_id = $settings['premium_video_box_video_id'];
297
+
298
+ $video_embed = $settings['premium_video_box_video_embed'];
299
+ ?>
300
+
301
+ <div class="premium-video-box-container" id="premium-video-box-container-<?php echo esc_attr( $this->get_id() ); ?>">
302
+ <div class="premium-video-box-image-container">
303
+ <img class="premium-video-box-image" src="<?php echo $settings['premium_video_box_image']['url']; ?>">
304
+ </div>
305
+ <div class="premium-video-box-play-icon-container">
306
+ <i class="premium-video-box-play-icon fa fa-play fa-lg"<?php if ( $settings['premium_video_box_icon_hover_animation'] === 'yes' ) : ?> onMouseOver="this.style.padding='18px'" onMouseOut="this.style.padding='15px'" <?php endif; ?>>
307
+ </i>
308
+ </div>
309
+ <?php if( !empty( $settings['premium_video_box_description_text'] ) ) : ?>
310
+ <div class="premium-video-box-description-container">
311
+ <p class="premium-video-box-text"><?php echo $settings['premium_video_box_description_text']; ?></p>
312
+ </div>
313
+ <?php endif; ?>
314
+ <div class="premium-video-box-video-container">
315
+ <?php if ( $video_type === 'youtube'){ ?>
316
+ <?php if ( $video_url_type === 'id' && !empty( $video_id ) ) : ?>
317
+ <iframe src="https://www.youtube.com/embed/<?php echo $video_id; ?>" frameborder="0" gesture="media" allow="encrypted-media" allowfullscreen>
318
+ </iframe>
319
+ <?php elseif ( $video_url_type === 'embed' && !empty( $video_embed ) ) : ?>
320
+ <iframe src="<?php echo $video_embed; ?>" frameborder="0" gesture="media" allow="encrypted-media" allowfullscreen>
321
+ </iframe>
322
+ <?php endif; ?>
323
+ <?php } elseif ( $video_type === 'vimeo'){ ?>
324
+ <?php if ( $video_url_type === 'id' && !empty( $video_id ) ) : ?>
325
+ <iframe src="https://player.vimeo.com/video/<?php echo $video_id; ?>" frameborder="0" title="Medicine" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" class="fluidvids-item" data-fluidvids="loaded">
326
+ </iframe>
327
+ <?php elseif ( $video_url_type === 'embed' && !empty( $video_embed ) ) : ?>
328
+ <iframe src="<?php echo $video_embed; ?>?byline=0&portrait=0" frameborder="0" top="0" webkitallowfullscreen mozallowfullscreen allowfullscreen>
329
+ </iframe>
330
+ <?php endif; ?>
331
+ <?php } ?>
332
+
333
+ </div>
334
+ </div>
335
+ <script>
336
+ jQuery(function( $ ){
337
+ $( "#premium-video-box-container-<?php echo esc_attr( $this->get_id() ); ?>" ).on( "click", function(){
338
+ $( this ).children( ".premium-video-box-video-container" ).css(
339
+ {
340
+ 'opacity': '1',
341
+ 'visibility': 'visible'
342
+ } );
343
+ } )
344
+ });;
345
+ </script>
346
+
347
+ <?php
348
+ }
349
+ }
350
+ Plugin::instance()->widgets_manager->register_widget_type(new Premium_Video_Box_Widget());
351
+
352
+
353
+