frontend.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. (function($) {
  2. FLBuilderAccordion = function( settings )
  3. {
  4. this.settings = settings;
  5. this.nodeClass = '.fl-node-' + settings.id;
  6. this._init();
  7. };
  8. FLBuilderAccordion.prototype = {
  9. settings : {},
  10. nodeClass : '',
  11. _init: function()
  12. {
  13. $( this.nodeClass + ' .fl-accordion-button' ).on( 'click', $.proxy( this._buttonClick, this ) );
  14. FLBuilderLayout.preloadAudio( this.nodeClass + ' .fl-accordion-content' );
  15. this._openDefaultItem();
  16. },
  17. _buttonClick: function( e )
  18. {
  19. var button = $( e.target ).closest( '.fl-accordion-button' ),
  20. accordion = button.closest( '.fl-accordion' ),
  21. item = button.closest( '.fl-accordion-item' ),
  22. allContent = accordion.find( '.fl-accordion-content' ),
  23. allIcons = accordion.find( '.fl-accordion-button i.fl-accordion-button-icon' ),
  24. content = button.siblings( '.fl-accordion-content' ),
  25. icon = button.find( 'i.fl-accordion-button-icon' );
  26. if (accordion.hasClass( 'fl-accordion-collapse' )) {
  27. accordion.find( '.fl-accordion-item-active' ).removeClass( 'fl-accordion-item-active' );
  28. allContent.slideUp( 'normal' );
  29. allIcons.removeClass( 'fa-minus' );
  30. allIcons.addClass( 'fa-plus' );
  31. }
  32. if (content.is( ':hidden' )) {
  33. item.addClass( 'fl-accordion-item-active' );
  34. content.slideDown( 'normal', this._slideDownComplete );
  35. icon.addClass( 'fa-minus' );
  36. icon.removeClass( 'fa-plus' );
  37. } else {
  38. item.removeClass( 'fl-accordion-item-active' );
  39. content.slideUp( 'normal', this._slideUpComplete );
  40. icon.addClass( 'fa-plus' );
  41. icon.removeClass( 'fa-minus' );
  42. }
  43. },
  44. _slideUpComplete: function()
  45. {
  46. var content = $( this ),
  47. accordion = content.closest( '.fl-accordion' );
  48. accordion.trigger( 'fl-builder.fl-accordion-toggle-complete' );
  49. },
  50. _slideDownComplete: function()
  51. {
  52. var content = $( this ),
  53. accordion = content.closest( '.fl-accordion' ),
  54. item = content.parent(),
  55. win = $( window );
  56. FLBuilderLayout.refreshGalleries( content );
  57. // Grid layout support (uses Masonry)
  58. FLBuilderLayout.refreshGridLayout( content );
  59. // Post Carousel support (uses BxSlider)
  60. FLBuilderLayout.reloadSlider( content );
  61. // WP audio shortcode support
  62. FLBuilderLayout.resizeAudio( content );
  63. if ( item.offset().top < win.scrollTop() + 100 ) {
  64. $( 'html, body' ).animate({
  65. scrollTop: item.offset().top - 100
  66. }, 500, 'swing');
  67. }
  68. accordion.trigger( 'fl-builder.fl-accordion-toggle-complete' );
  69. },
  70. _openDefaultItem: function()
  71. {
  72. if (typeof this.settings.defaultItem !== 'undefined') {
  73. var item = $.isNumeric( this.settings.defaultItem ) ? (this.settings.defaultItem - 1) : null;
  74. if (item !== null) {
  75. $( this.nodeClass + ' .fl-accordion-button' ).eq( item ).trigger( 'click' );
  76. }
  77. }
  78. }
  79. };
  80. })(jQuery);