Current File : /home/gulsvnnd/heaventouchspa.com/wp-content/plugins/vamtam-elements-b/assets/vamtam-accordion.js
(function($) {

	function doLoad() {
		const accordions = document.querySelectorAll( '.fl-module-vamtam-accordion' );

		for ( let i = 0; i < accordions.length; i++ ) {
			new VamtamAccordion( accordions[ i ].dataset.node );
		}
	}

	document.addEventListener( 'DOMContentLoaded', doLoad );

	window.FLBuilder && window.FLBuilder.addHook( 'didCompleteAJAX', doLoad );
	window.FLBuilder && window.FLBuilder.addHook( 'didRenderLayoutComplete', doLoad );

	VamtamAccordion = function( id ) {
		this.nodeClass = '.fl-node-' + id;
		this._init();
	};

	VamtamAccordion.prototype = {
		nodeClass: '',

		_init: function() {
			var el = $( this.nodeClass );

			if ( ! el.hasClass( 'vamtam-accordion-loaded' ) ) {
				$( this.nodeClass ).addClass( 'vamtam-accordion-loaded' );

				$( this.nodeClass + ' .fl-accordion-button' ).on( 'click', this._buttonClick.bind( this ) );

				FLBuilderLayout.preloadAudio( this.nodeClass + ' .fl-accordion-content' );

				this._openDefaultItem();
			}
		},

		_buttonClick: function( e ) {
			var button     = $( e.target ).closest( '.fl-accordion-button' ),
				accordion  = button.closest( '.fl-accordion' ),
				item       = button.closest( '.fl-accordion-item' ),
				allContent = accordion.find( '.fl-accordion-content' ),
				allIcons   = accordion.find( '.fl-accordion-button i.fl-accordion-button-icon' ),
				content    = button.siblings( '.fl-accordion-content' ),
				icon       = button.find( 'i.fl-accordion-button-icon' );

			if (accordion.hasClass( 'fl-accordion-collapse' )) {
				accordion.find( '.fl-accordion-item-active' ).removeClass( 'fl-accordion-item-active' );
				allContent.slideUp( 'normal' );
				allIcons.removeClass( 'vamtam-theme-minus' );
				allIcons.addClass( 'vamtam-theme-plus' );
			}

			if (content.is( ':hidden' )) {
				item.addClass( 'fl-accordion-item-active' );
				content.slideDown( 'normal', this._slideDownComplete );
				icon.addClass( 'vamtam-theme-minus' );
				icon.removeClass( 'vamtam-theme-plus' );
			} else {
				item.removeClass( 'fl-accordion-item-active' );
				content.slideUp( 'normal', this._slideUpComplete );
				icon.addClass( 'vamtam-theme-plus' );
				icon.removeClass( 'vamtam-theme-minus' );
			}
		},

		_slideUpComplete: function() {
			var content   = $( this ),
				accordion = content.closest( '.fl-accordion' );

			accordion.trigger( 'fl-builder.fl-accordion-toggle-complete' );
		},

		_slideDownComplete: function() {
			var content   = $( this ),
				accordion = content.closest( '.fl-accordion' ),
				item      = content.parent(),
				win       = $( window );

			FLBuilderLayout.refreshGalleries( content );

			// Grid layout support (uses Masonry)
			FLBuilderLayout.refreshGridLayout( content );

			// Post Carousel support (uses BxSlider)
			FLBuilderLayout.reloadSlider( content );

			// WP audio shortcode support
			FLBuilderLayout.resizeAudio( content );

			if ( item.offset().top < win.scrollTop() + 100 ) {
				$( 'html, body' ).animate({
					scrollTop: item.offset().top - 100
				}, 500, 'swing');
			}

			accordion.trigger( 'fl-builder.fl-accordion-toggle-complete' );
		},

		_openDefaultItem: function() {
			if ( document.querySelector( this.nodeClass + ' .fl-accordion-open-first' ) ) {
				document.querySelector( this.nodeClass + ' .fl-accordion-button' ).dispatchEvent( new Event( 'click' ) );
			}
		}
	};

})(jQuery);